`

浅谈GET,POST,PUT发送请求

 
阅读更多
一般我们在浏览器的地址栏输入网址回车后,发送的是GET请求

当用表单提交时(最普遍的是用户登录),我们可以指定是GET还是POST请求,这里需要注意的是有的浏览器并不支持PUT请求,那后台restful的PUT请求对应的方法岂不是不能用了

SpringMVC为我们提供了一种解决方案,

引用
<form id="user" action="/springmvc/user" method="post"> 
    <input type="hidden" name="_method" value="put"/> 
</form>


我们还是用POST方式,但是我们添加了一个名为_method的隐藏域,并且值为put,同时需要在web.xml中添加一个Filter,如下:

引用
<filter>
    <filter-name>HiddenHttpMethodFilter</filter-name>
    <filter-class>org.springframework.web.filter.HiddenHttpMethodFilter</filter-class>
</filter>
<filter-mapping>
    <filter-name>HiddenHttpMethodFilter</filter-name>
    <servlet-name>mcpMvc</servlet-name>
</filter-mapping>


这样虽然发送的仍然是POST请求,但是该Filter会把其转成PUT请求这样就可以调用PUT相应的方法了

这样做的缺点是前端页面我们需要额外添加一个隐藏域什么的

下面结合springMVC探讨一下JQuery发送AJAX请求的一些事

一般我们发送请求的代码如下:

引用
$.ajax({ 
        type : 'get', 
        url : 'http://localhost/TestSpring3.2R/coc/body?name=tom'
    });


或者如下:

引用
var mydata = {'name':'tom'};
$.ajax({ 
        type : 'get', 
        url : 'http://localhost/TestSpring3.2R/coc/body',
        data : mydata      
    });


那么这2种有什么区别呢?
经试验发现对于GET和POST方式,这2中没什么差别

但是对于PUT,第一种的参数可以顺利传入,但是第二种的参数就不能接受了,那么我们怎么才能得到第二种方式所穿的参数呢?

这里我们可以使用@RequestBody

@RequestBody对于GET请求是没有意义的

对于POST请求,无论你是使用第一种方式还是第二种方式,异或是2种方式同时使用,他会把所有的参数当放到@RequestBody所对应的那个参数里,输出的结果类似:

引用
id=ff&status=gg&name=ee


如果你要用到参数,你需要自己处理

对于PUT请求 @RequestBody所对应的那个参数的值就是通过第二种方式传进来来的值

------------------------------------我是分割线--------------------------------------

对于SpringMVC,它提供了MultiValueMap这个类,我们可以这样来接受参数

引用
@RequestMapping(value = "/", produces = "application/json;charset=UTF-8", method = RequestMethod.PUT)
@ResponseBody
public Map<String,Object> updateUser(@RequestBody MultiValueMap<String, String> valueMap){


他回把你传过来的参数,放到valueMap里,这个接口继承于Map<K, List<V>>,key就是传过来的参数名,value就是参数值,由于可能存在同名的参数,所以value的类型是List,这样我们就可以很方便的取得参数值了

参考:https://my.oschina.net/dxqr/blog/113766
分享到:
评论

相关推荐

    浅谈python requests 的put, post 请求参数的问题

    ### 浅谈Python Requests 库中的PUT与POST请求参数处理 在进行Web开发或API测试时,经常会遇到需要向服务器发送数据的情况。Python作为一种广泛使用的编程语言,提供了强大的`requests`库来帮助开发者轻松实现HTTP...

    浅谈Laravel POST,PUT,PATCH 路由的区别

    其中,GET用于请求指定资源的数据,POST用于向服务器提交数据,PUT用于请求服务器将请求主体存储在提供的URI下,PATCH用于对已存在的资源进行部分修改,而DELETE用于请求服务器删除指定的资源。 在Laravel框架中,...

    浅谈http协议和REST

    ### 浅谈HTTP协议与REST架构 #### HTTP协议概述 HTTP(Hypertext Transfer Protocol)是一种应用层协议,主要用于从Web服务器传输超文本文档至本地浏览器的传送协议。它采用客户端/服务器模式,通过TCP/IP进行通信...

    浅谈Express.js解析Post数据类型的正确姿势

    1、POST请求:HTTP/1.1 协议规定的 HTTP 请求方法有 OPTIONS、GET、HEAD、POST、PUT、DELETE、TRACE、CONNECT 这几种。其中 POST 一般用来向服务端提交数据。 2、 Content-Type : 是指 http/https 发送信息至服务器...

    浅谈Koa2框架利用CORS完成跨域ajax请求

    CORS将请求分为简单请求和非简单请求,可以简单的认为,简单请求就是没有加上额外请求头部的get和post请求,并且如果是post请求,请求格式不能是application/json(因为我对这一块理解不深如果错误希望能有人指出...

    浅谈ajax请求技术

    调用XMLHttpRequest对象的open()方法时需要指定请求类型(如GET、POST、PUT、DELETE等)、请求的URL地址以及一个布尔值参数,该参数指定请求是否为异步处理。异步处理是Ajax的核心特性,它允许在不阻塞当前页面的...

    浅谈angular2的http请求返回结果的subcribe注意事项

    这个模块提供了发送GET、POST、PUT等HTTP请求的方法。本文将深入探讨使用`subscribe()`处理HTTP请求返回结果时的一些关键注意事项。 首先,`subscribe()`函数是RxJS库中的一个操作符,它是Observable模式的核心部分...

    PHP小马免杀的浅谈[过最新D盾]1

    2. 改变HTTP请求类型,将GET请求改为POST请求,以避免某些基于请求类型的检测。 **方法二:防止被识别为可疑的`eval`** `eval`函数在PHP中常用于执行动态生成的代码,但因为其潜在的安全风险,容易被安全软件标记...

    浅谈AngularJS中$http服务的简单用法

    - `method`: 请求类型,可以是GET、POST、PUT、DELETE、JSONP、HEAD等。 - `url`: 要请求的URL,可以是绝对URL或相对于应用的相对URL。 - `params`: 参数对象或映射,用于GET请求中的查询字符串。 - `data`: 请求体...

    浅谈Fetch 数据交互方式

    6. 请求配置:fetch的配置对象提供了多种选项,允许我们设置请求的类型(GET、POST、PUT、DELETE等)、头部信息、请求模式、是否允许跨域、重定向策略等。通过这些配置,我们可以精确控制请求的行为,以适应不同的...

    浅谈angularjs $http提交数据探索

    在AngularJS中,$http服务是用于与服务器进行异步通信的主要工具,它支持GET、POST、PUT、DELETE等多种HTTP方法。 在讨论AngularJS $http提交数据之前,让我们先回顾一下jQuery中的$.post()方法。$.post()是jQuery ...

    浅谈jQuery框架Ajax常用选项

    2. `type`: 定义请求的类型,通常有GET、POST、PUT、DELETE等。GET用于获取数据,POST用于向服务器提交数据。 3. `data`: 这个选项用于传递请求参数,可以是字符串形式,如`"adminCode=king&age=22"`,也可以是对象...

    浅谈spring-boot 允许接口跨域并实现拦截(CORS)

    浅谈spring-boot允许接口跨域并实现拦截(CORS) Spring Boot中实现CORS(Cross-Origin Resource Sharing,跨域资源共享)机制是为了解决不同域名、协议或端口下的资源请求问题。在Spring Boot项目中,我们可以使用...

    浅谈JQuery+ajax+jsonp 跨域访问

    CORS允许使用所有类型的HTTP请求方法,包括GET、POST、PUT、DELETE等,具有更广泛的应用场景和安全性。 总结来说,JSONP是一种利用script标签特性实现的跨域解决方案,适用于简单的GET请求,而CORS则是一种现代的...

    浅谈Angular HttpClient简单入门

    使用 HttpClient 发起 HTTP 请求,可以使用 `get`、`post`、`put`、`delete` 等方法。例如,在 `config.service.ts` 文件中添加以下代码: ```typescript getConfig() { return this.http.get('请求地址', { ...

Global site tag (gtag.js) - Google Analytics