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

原创 2017年02月28日 13:04:01
我使用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:

版权声明:本文为博主原创文章,未经博主允许不得转载。

SpringMVC+Json构建基于Restful风格的应用

一、spring 版本:spring-framework-3.2.7.RELEASE 二、所需其它Jar包: 三、主要代码: web.xml ...
  • greensurfer
  • greensurfer
  • 2014年02月16日 20:55
  • 53947

Volley 使用PATCH的记录

Volley PATCH java.net.ProtocolException: Unknown method ‘PATCH’; must be one of [OPTIONS, GET, HEAD...
  • leexiaobin1993
  • leexiaobin1993
  • 2016年08月18日 13:59
  • 532

SpringMVC从request到controller过程详解

例行推广一下我的博客,喜欢这篇文章的朋友可以关注我的博客http://zwgeek.com 之前一篇文章 SpringMVC对象绑定时自定义名称对应关系 讲了如何去把request中的请求参数指定到...
  • zgzczzw
  • zgzczzw
  • 2016年12月30日 14:56
  • 5893

Tomcat + Spring MVC + HttpClient:如何使用PUT和PATCH方法传递数据

在RESTful风格的API中,PUT/PATCH方法一般用于更新数据。但是在项目中,通过HttpClient的PUT/PATCH进行请求,可是服务器端的servlet虽然能识别方法,可是却无法拿到数...
  • dduhmy
  • dduhmy
  • 2015年07月22日 11:14
  • 1511

SpringMVC浅谈

Spring是一个开源框架,Spring是于2003 年兴起的一个轻量级的Java 开发框架,由Rod Johnson创建。...
  • Gane_Cheng
  • Gane_Cheng
  • 2016年10月11日 21:28
  • 5185

http post put patch 总结

idempotent 幂等的如果一个方法重复执行多次,产生的效果是一样的,那就是idempotent的; idempotent的意思是如果相同的操作再執行第二遍第三遍,結果還是一樣。 "Methods...
  • sshfl_csdn
  • sshfl_csdn
  • 2015年08月20日 16:36
  • 1992

Spring 4.3 新增加的请求注解,对@RequestMapping()进行了细分

Spring 4.3 新增加的请求注解,对@RequestMapping()进行了细分 Spring 4.3针对注册请求增加了5个新注册分别如下: 1)、@GetMapping    相当于Get...
  • wwwihpccn
  • wwwihpccn
  • 2016年10月12日 22:31
  • 1663

Spring Web MVC 处理Http请求的大致过程

一旦Http请求到来,DispatcherSevlet将负责将请求分发。DispatcherServlet可以认为是Spring提供的前端控制器,所有的请求都有经过它来统一分发。 在Dispatche...
  • birthmarkqiqi
  • birthmarkqiqi
  • 2016年10月09日 11:04
  • 716

SpringMVC 中向后台传入json数据的问题

项目中,使用json向后台输入数据,总是报Caused by: com.fasterxml.jackson.core.JsonParseException: Unrecognized token 'v...
  • u010317655
  • u010317655
  • 2014年10月11日 14:00
  • 9639

SpringMVC @RequestBody问题:Unrecognized field , not marked as ignorable

在使用@RequestBody注解的时候需要注意一些问题: 1.一个方法中只能youy
  • isea533
  • isea533
  • 2014年06月22日 22:03
  • 31528
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:http请求使用patch,后台Springmvc处理请求参数问题
举报原因:
原因补充:

(最多只允许输入30个字)