文档章节

浅谈GET,POST,PUT发送请求

whaon
 whaon
发布于 2013/03/14 17:22
字数 663
阅读 21742
收藏 63

一般我们在浏览器的地址栏输入网址回车后,发送的是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,这样我们就可以很方便的取得参数值了

© 著作权归作者所有

whaon

whaon

粉丝 49
博文 42
码字总数 38353
作品 0
厦门
程序员
私信 提问
加载中

评论(9)

OURLINK加速
OURLINK加速
进行了GET,POST之外的请求(PUT请求)对网站不好
我等你
我等你
44哈~我说PUT为啥接收不到参数呢,我试试楼主的方法
2
250256197

引用来自“whaon”的评论

引用来自“予沁安”的评论

哈哈,我也做了类似处理,连取名_method都一样。不过是C#。

都一个道理

test
whaon
whaon 博主

引用来自“hanzhankang”的评论

put的目的是什么

你去看下restful
华兹格
华兹格
put的目的是什么
whaon
whaon 博主

引用来自“予沁安”的评论

哈哈,我也做了类似处理,连取名_method都一样。不过是C#。

都一个道理
予沁安
予沁安
哈哈,我也做了类似处理,连取名_method都一样。不过是C#。
whaon
whaon 博主

引用来自“JavaNewPer”的评论

没明白要表达什么?

没有想表达什么,只是在在使用过程发现的一些规律而已
JavaOlder
JavaOlder
没明白要表达什么?
记一次跨域post请求数据之preflight request

前端跨域是一个老生常谈的话题,前端必备的技能,网上相关介绍及解决方案绍多如牛毛,作者限于学识也讲不出太过深入的见解,故此本文只是记录一次解决跨域的post请求的小文,如果能帮助遇到相...

huaianfox
03/07
0
0
前端 | 浅谈preflight request

image.png 背景 不知道大家有没有发现,有时候我们在调用后台接口的时候,会请求两次,如下图的 图一.png 其实第一次发送的就是preflight request(预检请求),那么这篇文章将讲一下,为什么要...

瓦斯程序媛
2017/09/17
0
0
浅谈CSRF攻击方式

一.CSRF是什么?   CSRF(Cross-site request forgery),中文名称:跨站请求伪造,也被称为:one click attack/session riding,缩写为:CSRF/XSRF。 二.CSRF可以做什么?   你这可以这...

wsj234
2014/01/21
0
0
浅谈http协议

1.http基础概念 2.请求与响应过程 3.请求头响应头及请求方式简述 4.客户端缓存(cookie,session及其他缓存机制) 1.什么是http???? HTTP是一套计算机通过网络进行通信的规则。使HTTP客户(如...

Evan_zhan
2018/01/14
0
0
浅谈android访问http原理

前言 说到HTTP协议,那必须要说说WWW了,WWW是环球信息网(World Wide Web )的缩写,也可以简称为Web,中文名字为“万维网”。简单来说,WWW是以Internet作为传输媒介的一个应用系统,WWW网...

hfk
2016/01/14
0
0

没有更多内容

加载失败,请刷新页面

加载更多

为什么要在网站中应用CDN加速?

1. 网页加载速度更快 在网站中使用CDN技术最直接的一个好处就是它可以加快网页的加载速度。首先,CDN加速的内容分发是基于服务器缓存的,由于CDN中缓存了不少数据,它能够给用户提供更快的页...

云漫网络Ruan
15分钟前
2
0
亚玛芬体育(Amer Sports)和信必优正式启动合作开发Movesense创新

亚玛芬体育和信必优正式启动合作开发Movesense创新,作为亚玛芬体育的完美技术搭档,信必优利用Movesense传感器技术为第三方开发移动应用和服务。 Movesense基于传感器技术和开放的API,测量...

symbiochina88
26分钟前
2
0
创龙TI AM437x ARM Cortex-A9 + Xilinx Spartan-6 FPGA核心板规格书

SOM-TL437xF是一款广州创龙基于TI AM437x ARM Cortex-A9 + Xilinx Spartan-6 FPGA芯片设计的核心板,采用沉金无铅工艺的10层板设计,适用于高速数据采集和处理系统、汽车导航、工业自动化等领...

Tronlong创龙
27分钟前
2
0
好程序员Java学习路线分享MyBatis之线程优化

  好程序员Java学习路线分享MyBatis之线程优化,我们的项目存在大量用户同时访问的情况,那么就会出现大量线程并发访问数据库,这样会带来线程同步问题,本章我们将讨论MyBatis的线程同步问...

好程序员官方
33分钟前
6
0
IDEA 自定义方法注解模板

IDEA 自定义方法注解模板 1、使用效果 /*** 计算交易费用* @Author wangjiafang* @Date 2019/9/11* @param feeComputeVo* @return*/@PostMapping("/v1/fee_compute")public ApiResp......

小白的成长
33分钟前
6
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部