问题描述:
已声明
@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和Spring Security是Java开发中两个非常重要的框架,它们分别负责Web应用的MVC架构设计和安全管理。在Spring MVC 3.1版本中,它提供了更强大的注解支持,使得开发者可以更加简洁地定义控制器和处理HTTP...
Spring MVC 是一个基于 Java 的轻量级 Web 开发框架,它是 Spring 框架的一部分,主要用于构建 MVC(Model-View-Controller)模式的 Web 应用程序。在现代 Web 开发中,JSON(JavaScript Object Notation)作为一种...
例如,如果我们有一个`User`类,Spring MVC可以通过`@RequestBody`注解将JSON解析成`User`对象。 4. **JSON输出** 对于响应,我们可以返回一个对象或集合,Spring MVC会自动将其转换为JSON并设置合适的HTTP响应头...
2. **Improved REST Support**:Spring 3.1增强了对RESTful Web服务的支持,通过新增的@PathVariable、@MatrixVariable、@RequestParam和@RequestHeader等注解,使得参数绑定更加灵活,更方便地处理HTTP请求的不同...
在本文中,我们将深入探讨如何将Spring MVC 3.1与MyBatis 3.1框架集成,并讨论其中涉及的关键技术,如事务管理、分页和JSON数据交换。此外,我们还将简要提及开发环境中使用的工具,如Eclipse 4.3、Maven 3.0.5和...
在Spring MVC框架中,我们经常需要处理JSON数据,这些数据可能包含null值。在某些情况下,为了保持数据的整洁和避免后端处理null值时出现异常,我们需要在数据传输前过滤掉这些null值。本教程将详细介绍如何使用...
默认情况下,Spring MVC使用`HttpMessageConverter`来完成这个转换,其中最常用的转换器是`MappingJackson2HttpMessageConverter`,它依赖于Jackson库来序列化对象为JSON。 接下来,我们将探讨如何实现JSON数据的...
7. **集成Spring MVC**:Spring Security 3.1与Spring MVC无缝集成,可以方便地保护Web控制器和视图。通过注解,如`@Secured`和`@PreAuthorize`,可以在方法级别声明安全约束。 8. **自定义逻辑**:Spring Security...
Spring MVC中的`@ResponseBody`注解可以将方法的返回值直接转换为JSON格式发送到客户端,而`@RequestBody`则可以将请求体中的JSON数据解析成Java对象。 **Jackson** Jackson是Java中广泛使用的JSON库,它可以高效地...
在Spring MVC框架中,开发人员经常需要处理不同的数据交换格式,如XML和JSON,以便与客户端进行交互。这两种格式在Web应用中广泛用于传输数据,因为它们轻量级且易于解析。下面我们将深入探讨如何在Spring MVC中生成...
本篇将深入探讨Spring MVC 3对JSON的支持以及解决常见错误的方法。 首先,让我们了解什么是JSON。JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,易于人阅读和编写,同时也易于机器解析和生成。在...
总结,Spring MVC结合jQuery传递JSON数据时,需要注意JSON格式、Content-Type设置、Controller的参数绑定以及可能出现的问题及其解决策略。通过正确的配置和调试,可以确保JSON数据在前后端之间顺利传输。
**Spring3 MVC与Ajax结合使用JSON** 在现代Web开发中,Spring框架的MVC模块与Ajax和JSON的集成是创建动态、响应式用户界面的关键技术。这个"Spring3 MVC Ajax with JSON"项目提供了一个Eclipse工程,包含了实现这一...
这个"spring3.1完整包"包含了Spring框架的多个核心模块,下面将详细介绍这些模块及其功能。 1. **org.springframework.context-3.1.0.M1.jar**:这是Spring上下文模块,提供了容器的核心功能,包括Bean的定义、配置...
一个简单SpringMVC例子,从请求到controller跳转再到页面显示能完整执行成功。使用myeclipse6.0搭建,使用Spring3.1部分jar包,使用jdk1.6.0_45和自带的myeclipse tomcat。
在本章中,我们将深入探讨Spring MVC框架与Servlet API以及JSON支持的相关知识。Spring MVC是Spring框架的一个核心模块,主要用于构建Web应用程序,它提供了一种优雅的方式来处理HTTP请求和响应,实现了模型-视图-...
### 解决Spring MVC JSON无限死循环问题 在开发基于Spring MVC的应用程序时,经常会遇到将对象转换为JSON格式的需求。然而,在某些情况下,由于对象之间的循环引用,可能会导致JSON序列化过程中出现无限递归的问题...
Spring 框架是Java开发领域中的一个基石,它的出现极大地简化了企业级应用的构建。Spring 3.1 版本是该框架的一个重要里程碑,它在前一个版本的基础上进行了许多改进和优化,旨在提高性能、增强可扩展性和提供更好的...
总之,"Spring MVC JSON学习"涵盖了许多关键概念,包括JSON数据的序列化和反序列化、控制器中使用`@RequestBody`和`@ResponseBody`、自定义序列化逻辑以及测试JSON API。掌握这些知识点将使你能够构建出高效、健壮的...
targetNamespace="http://www.springframework.org/schema/mvc