POST方法给@RequestBody传参数失败的解决及原因分析

 更新时间:2021年10月22日 11:22:30   作者:凌渊阁  
这篇文章主要介绍了POST方法给@RequestBody传参数失败的解决及原因分析,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

POST方法给@RequestBody传参数失败

通过ajax给springMVC传递参数时,通过post方法传递json字符串时常用的方式,这时后端应该通过@RequestBody注解配合springMVC中配置的消息转换器来进行json字符串的解析。

因为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.springframework.http.converter.json.MappingJacksonHttp2MessageConverter ,选择的这种配置用的是jackson2.X版本的,用来解析json数据。

spring 3.x的对应的版本:

org.springframework.http.converter.json.MappingJacksonHttpMessageConverter 

这种配置用的是jackson1.X版本的

3,必须要在请求头中声明数据的类型Content-Type,

4,前端json数据和后端json数据 首字母不要大写,首字母大写映射不上,以驼峰格式命名。

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • java并发编程_线程池的使用方法(详解)

    java并发编程_线程池的使用方法(详解)

    下面小编就为大家带来一篇java并发编程_线程池的使用方法(详解)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-05-05
  • Springboot如何通过路径映射获取本机图片资源

    Springboot如何通过路径映射获取本机图片资源

    项目中对图片的处理与查看是必不可少的,本文将讲解如何通过项目路径来获取到本机电脑的图片资源,本文通过示例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧
    2023-08-08
  • 功能强大的TraceId 搭配 ELK使用详解

    功能强大的TraceId 搭配 ELK使用详解

    这篇文章主要为大家介绍了功能强大的TraceId 搭配 ELK使用详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-09-09
  • mybatis原理概述入门教程

    mybatis原理概述入门教程

    这篇文章主要介绍了在今天这篇博文中,我将要介绍一下mybatis的框架原理,以及mybatis的入门程序,实现用户的增删改查,她有什么优缺点以及mybatis和hibernate之间存在着怎么样的关系,大家这些问题一起通过本文学习吧
    2016-09-09
  • 一文理清什么是BIO以及如何使用

    一文理清什么是BIO以及如何使用

    这篇文章主要介绍了什么是BIO以及如何使用,BIO英文全名是blockingIO,也叫做阻塞IO,是最容易理解、最容易实现的IO工作方式,本文就来通过一些简单的示例为大家讲讲BIO吧,需要的朋友可以参考下
    2023-10-10
  • java对象转换String类型的三种方法

    java对象转换String类型的三种方法

    在很多情况下我们都需要将一个对象转换为String类型。一般来说有三种方法可以实现:Object.toString()、(String)Object、String.valueOf(Object)。下面对这三种方法一一分析
    2013-11-11
  • 详解SpringBoot构建Docker镜像的3种方式

    详解SpringBoot构建Docker镜像的3种方式

    这篇文章主要介绍了SpringBoot构建Docker镜像的3种方式,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-06-06
  • 深入理解java中的null“类型”

    深入理解java中的null“类型”

    这篇文章主要介绍了深入理解java中的null“类型”,分享了相关代码示例,小编觉得还是挺不错的,具有一定借鉴价值,需要的朋友可以参考下
    2018-01-01
  • Flutter实现文本组件、图标及按钮组件的代码

    Flutter实现文本组件、图标及按钮组件的代码

    这篇文章主要介绍了Flutter实现文本组件、图标及按钮组件的代码,本文给大家介绍的非常详细,具有一定的参考借鉴价值 ,需要的朋友可以参考下
    2019-07-07
  • springboot实现多文件上传功能

    springboot实现多文件上传功能

    这篇文章主要为大家详细介绍了springboot实现多文件上传功能,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-11-11

最新评论