Roderick

没事记录记录

http请求使用patch,后台Springmvc处理请求参数问题
我使用jmeter和jsp+ajax来发送patch的请求一直报400,415的错误。
1先说jmeter,我一开始是将请求参数放在parameters中。然后方法选择patch,但是一直请求不到



2.我用ajax也是一样:



上网查资料:(https://vaskoz.wordpress.com/2013/07/20/spring-requestmethod-patch/)

意思在这里,首先用patch方法,默认是以x-www-form-urlencoded的contentType来发送信息,并且信息内容是放在request的body里,后台Springmvc的controller在解析controller参数的时候使用的解析器是ServletModelAttributeMethodProcessor,但是这个方法不支持PATCH,当使用getParameterMap()获取body内容的时候,获取不到信息。
所以这里需要用到@RequestBody的方法来绑定数据,此时使用的是RequestResponseBodyMethodProcessor来解析Controller的参数,可以将json格式的内容装载到pojo里,Java Servlet没有doPatch的方法,所以没办法解析传递过来的参数,故用了Spring,所以如果你用了“application/json”的contentType,你必须传递一个json格式的内容
再看这个解释:(http://docs.spring.io/spring-data/rest/docs/current/reference/html/)

也就是说contentType只是支持这四个方式。
然后我在jmeter修改了下

然后添加了个header:(contentType可以是上面4种之一)

后台是这样取得:

这样就可以获取成功了,传递的参数会装到restParams中。
如果我把jmeter传递参数改成ptime=11111111&sign="xxxxxxxxx",后台会报错

2017-02-28 11:37:16,763  WARN org.springframework.web.servlet.mvc.support.DefaultHandlerExceptionResolver [qtp4133428-19] (DefaultHandlerExceptionResolver.java:377) - Failed to read HTTP message: org.springframework.http.converter.HttpMessageNotReadableException: Could not read document: Unrecognized token 'ptime': was expecting ('true', 'false' or 'null')
 at [Source: java.io.PushbackInputStream@698aae; line: 1, column: 7]; nested exception is com.fasterxml.jackson.core.JsonParseException: Unrecognized token 'ptime': was expecting ('true', 'false' or 'null')
 at [Source: java.io.PushbackInputStream@698aae; line: 1, column: 7]
这个错误我后面会继续跟进。
(后来的补充:因为content-type设定的是json格式,所以传递的参数不能是 参数=值&参数=值 的格式,不然传到后台,是使用json解析器来解析,这时会解析失败)

好了说回ajax。
改动为:

添加了contenType与将参数转化为json格式再传递过去。
注意一定要将内容转为json才能发送,不然400:

转为json:

阅读更多
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u011548068/article/details/58591609
个人分类: java web
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

不良信息举报

http请求使用patch,后台Springmvc处理请求参数问题

最多只允许输入30个字

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭