springmvc使用@RequestBody时报400错误
来源:互联网 发布:魅蓝note3网络制式 编辑:程序博客网 时间:2024/04/29 05:12
首先前台发送json字符串的时候,后台才使用@RequestBody,好处是一些复杂数据类型也可以接收。使用jquery一般如下发送
<script type="text/javascript">function dologin(){ var user={}; user.loginname = "zhansan"; user.password = "123456"; $.ajax({ type:'POST', url:'login.json', dataType:"json", contentType:"application/json", data:JSON.stringify(user), success:function(data){ if(data.success){ location.href="index.jsp"; } } });}</script>
注意,data的值使用了JSON.stringify(),它是一个json字符串,而不是对象。
后台接收:
@RequestMapping("/login")public void login(@RequestBody LoginParam param){System.out.println(param.toString());}
当前台传过来的json字符串里包含了目标类型中没有的属性名的时候就会报错,一般就是报400错误。比如上面的js代码中如果user还有个属性yz,而后台LoginParam中没有yz这个属性,那默认情况下就会报错。
实际上是springmvc调用jackson进行数据转换时发生了错误。springmvc默认使用Jackson的objectmapper类来进行转换工作,而objectmapper在转换的时候默认情况下是如果在目标类中找不到json字符串中的属性就会报错。
这里贴出针对1.x版本jackson的两种解决方法,2.x版本解决方法类似。
方法一:在目标类上加注解@JsonIgnoreProperties,类似:
import org.codehaus.jackson.annotate.JsonIgnoreProperties;@JsonIgnoreProperties(ignoreUnknown = true)//忽略未知属性public class LoginParam { ........}方法二:写个objectmapper注入到MappingJacksonHttpMessageConverter中可以一劳永逸的解决这个问题
配置文件:
<bean class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter"> <property name="supportedMediaTypes" value="application/json;charset=UTF-8" /> <property name="objectMapper" ref="MyObjectMapper" /></bean>
<bean id="MyObjectMapper" class="xx.MyObjectMapper"></bean>objectMapper类:
import org.codehaus.jackson.map.DeserializationConfig;import org.codehaus.jackson.map.ObjectMapper;public class MyObjectMapper extends ObjectMapper { public MyObjectMapper(){ //目标类中找不到json字符串中属性时直接忽略 this.configure(DeserializationConfig.Feature.FAIL_ON_UNKNOWN_PROPERTIES, false); }}
0 0
- springmvc使用@RequestBody时报400错误
- SpringMVC使用@RequestBody注解报400错误
- SpringMVC @RequestBody使用
- springmvc使用@requestBody注释json数据,浏览器错误415
- springmvc使用@requestBody注释json数据,浏览器错误415
- springmvc 使用 @RequestBody接收参数
- SpringMVC @ResponseBody和@RequestBody使用
- 使用SpringMVC使用异步提交时报406错误
- springmvc 使用@requestBody postman调试报错415/400
- SpringMVC @RequestBody 自动转json Http415错误
- SpringMVC @RequestBody 自动转json Http415错误
- SpringMvc:在使用@RequestBody和@ResponseBody的时候报415错误
- 关于SpringMVC使用@RequestBody注解接受json格式数据报415错误
- @RequestBody-------springMVC
- SpringMVC @RequestBody
- springMVC使用RequestBody注解声明接收json
- Springmvc前台通过ajax传值到后台用@RequestBody接收,报415/400错误
- springMVC中@RequestBody在使用时遇到的坑
- ConcurrentHashMap深入分析
- M1卡具体操作
- MongoDB Replicate Set 复制集安装与配置
- 使用sklearn做单机特征工程
- 网银支付
- springmvc使用@RequestBody时报400错误
- apk反编译、回编译相关工具的使用整理
- Extjs中左边treepanel右边panel动态加载jsp页面
- 文本多于最大字数后用省略号来代替的的文字
- HashMap,LinkedHashMap,TreeMap的区别+如何替换LinkedHashMap键位的值+RecyclerView单条更新
- RABBITMQ集群与负载均衡
- 242. Valid Anagram
- POJ2376Cleaning Shifts(贪心)
- Material Design: NavigationView FlaotingActionBar SnackBar的使用