SpringMVC绑定ajax传递json数据到pojo对象错误(400 Bad Request)

来源:互联网 发布:林心如人设崩塌知乎 编辑:程序博客网 时间:2024/05/16 18:14

问题如标题所述,ajax向SpringMVC Controller传递JSON数据,遇到了错误“Failed to load resource: the server responded with a status of 400 (Bad Request)”,该错误为前端报错,JSON数据压根没有被Controller接收。因为后端想通过接收JSON数据直接转换为pojo对象,进行pojo绑定。

经过一晚上的调试,最后定位问题于后台Controller无法转换接收到的JSON数据。进一步寻找解决方案,定位到了问题原因:pojo类中存在Date类型成员变量,转换器无法将Date类型成员变量正确转换。通过使用没有Data类型数据成员的pojo类进行测试,发现确实是问题的真正原因。

1. 解决方案

实体类中加日期格式化注解

@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")private Date algorithmTime;

进一步,在相对应的pojo类中增添默认构造函数,没有这一步可能无法解决问题,所以该步骤极为重要。可能是由于在转换器转换过程中要调用默认构造函数来构造pojo对象。

public class Algorithm {    //默认构造函数    public Algorithm(){    }}

2. SpringMVC接收ajax的JSON数据,后端绑定pojo对象

前端ajax:

 var alg={     algorithmName:algName,     algorithmDescribe:algDesc,     classId:classId,     className:className }; $.ajax({     type:'POST',     url:'algorithm/add',     data:JSON.stringify(alg),     dataType:'json',     contentType:'application/json; charset=utf-8',     async:true,     success:function(data){         console.log(data['algInfo']);     } });

Controller处理:

@RequestMapping(value = "/algorithm/add",method = RequestMethod.POST,consumes = "application/json")@ResponseBodypublic String addAlgorithm(@RequestBody Algorithm algorithm){     /**       * 处理步骤       **/     Map<String,String> map=new HashMap<String, String>();     map.put("algInfo",algorithm.toString());     return map;}

该问题还有许多解决的办法,但是这个方法是最简单的。在解决这个问题的过程中,《SpringMVC中出现”400 Bad Request”错误(用@ResponseBody处理ajax传过来的json数据转成bean)的解决方法》和《SpringMVC日期类型转换问题三大处理方法归纳》这两篇博文和博文的评论给了我非常大的帮助,感谢作者,其他的解决方法也可以从这两篇博文中找到。

参考:

  1. http://blog.csdn.net/chenleixing/article/details/43740759
  2. http://blog.csdn.net/chenleixing/article/details/45190371
  3. @InitBinder 用法
  4. SpringMVC中的参数绑定总结
  5. SpringMVC Ajax 获取参数的方法
0 0
原创粉丝点击