解决 spring mvc3.1下post json出现HTTP Status 400 The request sent by the client was syntactically incorrect

问题描述:

已声明

@RequestMapping(value="update", method = RequestMethod.POST) 
    @ResponseBody 
    public Map<String, Result> updateNavi(@RequestBody Navigation model)

启动日志有:

Mapped "{[/navi/update],methods=[POST],params=[],headers=[],consumes=[],produces=[],custom=[]}" onto public java.util.Map<java.lang.String, com.apusic.ebiz.framework.web.controller.Result> com.mm.NavigationController.updateNavi(com.mm.navigation.Navigation)

执行

$.postJSON(‘http://localhost:8082/mm/navi/update‘,{a:1})

报400错误.

$.postJSON(‘http://localhost:8082/mm/navi/update‘,{})

没有错.

他大爷的,之前一直使用这个方法,提交表单完全正常。见鬼了。



排错

1.控制台无任何信息,认为请求根本没有进系统,以被tomcat档住了,怀疑是web.xml,spring-mvc.xml等配置问题

但修改web.xml,spring-mvc的N多参数无果。但想想,之前都可以成功,为啥突然不成功呢,奇怪了。

2.怀疑构造的post的data不是json格式的,专门从一个能成功提交的json格式对比一下,完全一样。这下傻眼了、

3.为什么空JSON构造能成功呢?请求直接到了Controller,不知道

4.当我尝试使用

$.postJSON(‘http://localhost:8082/mm/navi/update‘,””)

它居然报错了,原来,他进了系统,返回错误给TOMCAT,所以tomcat才报错的400

果断在org.springframework.web.servlet.DispatcherServlet.doDispatch(HttpServletRequest, HttpServletResponse)打断点

果然,进来了,一步步跟,发现下面有log.debug,原来有日志的,而我的控制台没日志,郁闷,一看log4j,果然是info级别的



解决:

打开log4j对org.springframework.web=debug

再次请求

$.postJSON(‘http://localhost:8082/mm/navi/update‘,{a:1})

终于见到异常了

Resolving exception from handler org.springframework.http.converter.HttpMessageNotReadableException: Could not read JSON: Unrecognized field "a" (Class com.mm.navigation.Navigation), not marked as ignorable 
at [Source: org.apache[email protected]; line: 1, column: 7] (through reference chain: com.apusic.mm.navigation.Navigation["a"]); nested exception is org.codehaus.jackson.map.exc.UnrecognizedPropertyException: Unrecognized field "a" (Class com.mm.navigation.Navigation), not marked as ignorable 
at [Source: [email protected]; line: 1, column: 7] (through reference chain: com.apusic.mm.navigation.Navigation["a"])

之前异常都被 spring吃了,烦啊。

原来是实体Navigation里没有a的属性,转换不成功,抛出异常,却被spring转成400错误,简单丢出来了,spring厚道啊。

再次请求有的参数,

$.postJSON(‘http://localhost:8082/mm/navi/update‘,{id:1})

果然好了。

仅写此,共享之,启发一下,问题虽然简单,但有时候脑子容易短路,找不到点。

附:

$.postJSON = function(url, data, callback) { 
    return jQuery.ajax({ 
        ‘type‘: ‘POST‘, 
        ‘url‘: url, 
        ‘contentType‘: ‘application/json‘, 
        ‘data‘: JSON.stringify(data), 
        ‘dataType‘: ‘json‘, 
        ‘success‘: callback 
    }); 
};

时间: 2024-11-06 03:49:55

解决 spring mvc3.1下post json出现HTTP Status 400 The request sent by the client was syntactically incorrect的相关文章

解决SpringMVC入参出现The request sent by the client was syntactically incorrect请求语法错误方法

使用SpringMVC出现The request sent by the client was syntactically incorrect.请求错误如下: 可以确定为提交的表单数据和目标方法的入参不一致所导致,表单数据可以多于目标入参个数,但目标参数没有被赋值,则会出现该异常,如下情况: 表单数据: 目标方法: Employee字段: 比对表单数据和Employee字段,可以发现,表单数据比Employee字段少,再加上目标方法的入参是一个 Employee对象,所以将会出现提交的数据不足,

错误The request sent by the client was syntactically incorrect的解决

问题:错误400-The request sent by the client was syntactically incorrect. springMVC中,某个页面提交时报400错误,如下图. 解决方法: 1.在网上找了一下,答案是通常遇到这个错误是因为前端jsp页面的控件名称和controller中接收的参数名称不一致.但仔细对比了一遍发现没有问题.很郁闷. 2.然后就反复的提交那个页面进行测试,发现了问题,因为我是将多个参数作为一个实体传至controller,发现某个文本框为空时,提交

Spring MVC &quot;The request sent by the client was syntactically incorrect ()&quot;解决办法 .

利用SpringMVC3框架验证@DateTimeFormat注解时,遇到一个奇的错,只要表单中的日期字段一输入值则就会如下错: 让人很莫名其妙.查了许久,也试了不少网上说的方法,比如有的说缺少joda-time-2.3.jar包的引用(后来证实不是这个原因). JAVA代码如下片段如下: @Resource public class Employee { private String id; private String lastName; private int gende; private

错误The request sent by the client was syntactically incorrect ()的解决

类属性的类型不一样也会造成这种情况 这个错误是SpringMVC报出来的,见到它意味着html/jsp页面的控件名称 和 controller里函数的参数不符. 好比界面有个这样的form <form name="form1" action="uploadDocument.html" method="post" ENCTYPE="multipart/form-data"> <div class="f

【转】解决spring mvc 中ajax返回json乱码问题

转载自:http://my.oschina.net/u/140421/blog/176625 转载自:http://my.oschina.net/candon/blog/149073?fromerr=I9VBOy62 第一个转载: 在使用spring-mvc的mvc的时候既享受它带来的便捷,又头痛它的一些问题,比如经典的中文乱码问题.现在是用json作为客户端和服务端 的数据交换格式貌似很流行,但是在springmvc中有时候会因为我们的各种疏忽从而造成页面ajax请求到的相应数据,如果带有中文

Spring MVC,HTTP Status 400 ,jQuery

一.先看下4xx错误的说明 [转载] http status 400,http 400,400 错误 [参考] status code 400, Bad Request (§10.4.1) 4 请求失败4xx 4xx应答定义了特定服务器响应的请求失败的情况.客户端不应当在不更改请求的情况下重新尝试同一个请求.(例如,增加合适的认证信息).不过,同一个请求交给不同服务器也许就会成功. 4.1 400 Bad Request 请求中的语法错误.Reason-Phrase应当标志这个详细的语法错误,比

使用Spring MVC 的 @RequestBody 映射json请求参数时报异常问题

使用Spring MVC 的 @RequestBody 映射json请求参数时报"The request sent by the client was syntactically incorrect."异常解决方案 最近工作中开发RESTful接口需要处理客户端上传的json,图方便想起Spring的Controller中有@RequestBody可以优雅地完成json报文与Java类的映射,但是使用时碰到了 "The request sent by the client w

Spring MVC3返回JSON数据中文乱码问题解决

Spring MVC3返回JSON数据中文乱码问题解决 查了下网上的一些资料,感觉比较复杂,这里,我这几使用两种很简单的办法解决了中文乱码问题. Spring版本:3.2.2.RELEASE Jackson JSON版本:2.1.3 解决思路:Controller的方法中直接通过response向网络流写入String类型的json数据. 使用 Jackson 的 ObjectMapper 将Java对象转换为String类型的JSON数据. 为了避免中文乱码,需要设置字符编码格式,例如:UTF

Spring MVC3返回JSON数据中文乱码问题解决(转)

Spring MVC3返回JSON数据中文乱码问题解决 查了下网上的一些资料,感觉比较复杂,这里,我这几使用两种很简单的办法解决了中文乱码问题. Spring版本:3.2.2.RELEASE Jackson JSON版本:2.1.3 解决思路:Controller的方法中直接通过response向网络流写入String类型的json数据. 使用 Jackson 的 ObjectMapper 将Java对象转换为String类型的JSON数据. 为了避免中文乱码,需要设置字符编码格式,例如:UTF