POST⽅法给@RequestBody传参数失败的解决及原因分析
⽬录
POST⽅法给@RequestBody传参数失败
@RequestBody参数映射不上,@RequestBody报错
⾔归正传问题是这样的
报错原因
POST⽅法给@RequestBody传参数失败
通过ajax给springMVC传递参数时,通过post⽅法传递json字符串时常⽤的⽅式,这时后端应该通过@RequestBody注解配合springMVC中配置的消息转换器来进⾏json 字符串的解析。springmvc选择题
因为post⽅法中的json字符串通常是⼀个前端的json对象转化⽽成的字符串,所以后端@RequestBody后⾯可以使⽤HashMap<String,Object>类型来接收所有参数。
通过这种⽅式可以⾮显式的传送⼤量的参数到后端,并且和具体参数⽆关,便于以后对参数进⾏扩展,对
于不确定参数的场合,这种⽅式解除了与具体参数的耦合。但是由于简单的过程实际上经历了许多SpringMVC的操作,所以经常会遇到各种奇怪问题。
其中post⽅法请求体中的json字符串⽆法成功通过SpringMVC中配置的MessageConverter(⼀般是MappingJackson2HttpMessageConverter)转换为@RequestBody注解的HashMap对象,是可以见到的问题。
这个时候你可以检查下ajax请求的content-type请求头,因为在配置MessageConverter消息转换器的时候,需要配置其所检查的请求体类型(content-type),默认情况下浏览器的ajax会添加content-type:application/x-www-form-urlencoded的请求头,但是有的浏览器或者有些时候会发送content-type:application/x-www-form-urlencoded;charset:utf-8到后端,导致MappingJackson2HttpMessageConverter漏过对它的检查,这个时候SpringMVC会使⽤其他的MessageConverter来解析request body中的内容,这样肯定是会解析失败的。
如果遇到这种情况,⽐较好的解决⽅式,可能是在ajax的post请求中强制注明 contentType:application/json,并将application/json 和application/json;charset=utf-8两种MediaType(MimeType)添加到MappingJackson2HttpMessageConverter对象的检查列表中。
这样就可以保证post⽅法的请求体中的json字符串被MappingJackson2HttpMessageConverter对象检查
并解析。
@RequestBody参数映射不上,@RequestBody报错
最近代码遇见了⼀个springmvc中的⼩问题,算是很基础的东西,同事问我后我有有些迷惑上⽹了⼀些资料后弄清楚了。特此记录⼀下springmvc注解@requestbody来传递参数映射⼀个对象。
⾔归正传问题是这样的
使⽤postMan 发送httppost 请求:
最后报错。
报错原因
在使⽤postMan发送post请求的时候没有选择如下:
也就是下⾯说的需要注意的地⽅需要注意的地⽅是:
1.前端做保存操作的时候提交了很多参数过来,前端代码提交的时候content-type改成application/json,后台也配置了⼀个针对spring4的son类型的httpmessageConverter,
@RequsetBody 绑定的数据类型:
⼀般⽤来处理⾮Content-Type: application/x-www-form-urlencoded编码格式的数据。
GET请求中,因为没有HttpEntity,所以@RequestBody并不适⽤。POST请求中,通过HttpEntity传递的参数,必须要在请求头中声明数据的类型Content-
Type,SpringMVC通过使⽤HandlerAdapter 配置的HttpMessageConverters来解析HttpEntity中的数据,然后绑定到相应的bean上。
1,使⽤@RequestBody 前后端参数要匹配个数不能少。字段名字要⼀样。
2,检查配置⽂件spring的版本。对应的 spring4 的版本的适配器对应的:
请⽤org.verter.json.MappingJacksonHttp2MessageConverter ,选择的这种配置⽤的是jackson2.X版本的,⽤来解析json数据。
spring 3.x的对应的版本:
org.verter.json.MappingJacksonHttpMessageConverter
这种配置⽤的是jackson1.X版本的
3,必须要在请求头中声明数据的类型Content-Type,
4,前端json数据和后端json数据⾸字母不要⼤写,⾸字母⼤写映射不上,以驼峰格式命名。
以上为个⼈经验,希望能给⼤家⼀个参考,也希望⼤家多多⽀持。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。