问题描述:
已声明
@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.catalina.connector.CoyoteInputStream@8f74ba; 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: org.apache.catalina.connector.CoyoteInputStream@8f74ba; 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
});
};
相关推荐
spring MVC 3.1+spring security3.1+mybaits+ 注解 实现安全机制。jar包没有上传。自己补充
spring mvc生成xml或json
Spring 3.1 jar包Spring 3.1 jar包Spring 3.1 jar包Spring 3.1 jar包Spring 3.1 jar包
spring 3.1 mvc sample Spring 3.1的最新例子
该项目在以前的基础上整合了json的使用
springsecurity3.1.pdf
spring mvc拦截器,过滤json数据中的null值,将null变成空字符串,内含截图,及jar包
一个简单SpringMVC例子,从请求到controller跳转再到页面显示能完整执行成功。使用myeclipse6.0搭建,使用Spring3.1部分jar包,使用jdk1.6.0_45和自带的myeclipse tomcat。
spring3.1完整包
Spring MVC属于SpringFrameWork的后续产品,已经融合在Spring Web Flow里面。Spring 框架提供了构建 Web 应用程序的全功能 MVC 模块。Spring MVC4是当前zuixin的版本,在众多特性上有了进一步的提升。, 在精通Spring...
targetNamespace="http://www.springframework.org/schema/mvc
spring security3.1高级详细开发指南 包含一个简单例子和一个复杂例子
工程文件 博文链接:https://starscream.iteye.com/blog/1067606
Spring MVC 3.1演示 该项目包含展示样式的微型样本,这些样本演示了Spring MVC 3.1中可用的自定义和功能。 部署该应用程序,导航到主页localhost:8080 / spring-mvc-31-demo并按照此处列出的各种链接进行操作。 该...
springMVC3.1 +mybatis3.1集成,包括事务,jqueryEasyUI分页,json,数据库连接池等。环境使用eclipse4.3+maven3.0.5+tomcat7
解决spring mvc中jason无限死循环的方案
spring3.1官方所有的jar包 org.springframework.aop-3.1.RELEASE.jar org.springframework.asm-3.1.RELEASE.jar org.springframework.aspects-3.1.RELEASE.jar org.springframework.beans-3.1.RELEASE.jar org....
spring mvc 常用开发框架 jar包 提高开发效率 降低开发难度
这是结合博客的源码,链接是:http://blog.csdn.net/u012660464/article/details/53463708 。名为:使用Spring MVC生成Json数据,我们后台开发生成了Json数据后可以供前端进行异步调用。
这是一个以SpringMVC3.1 + Mybatis3.1为核心框架的Demo源码,本人经调试并测试通过,供广大初爱好J2EE编程者学习。