场景:
web.xml中增加了一个DispatcherServlet配置,并在同级目录下添加了**-servlert.xml文件,搭建起了一个spring mvc的restful访问接口。
问题描述:
Controller的@RequestBody,
如果参数定义类型为String,则可以获取到数据;
如果参数定义类型为其他java对象,就接收不到。
下面记录完整的解决方法:
1. web.xml
contextConfigLocation
classpath:applicatonContext.xml
rest
org.springframework.web.servlet.DispatcherServlet
contextConfigLocation
/WEB-INF/rest-servlet.xml
1
rest
/rest/*
2. rest-servlet.xml
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.0.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd">
3. applicatonContext.xml
添加如下的一段配置:
作用:指定json类型参数的转换器,可将接收到的json类型的参数,封装为java对象。(去掉这个配置就会报错)
application/json;charset=UTF-8
4. pom.xml
添加三个jackson依赖jar包。(spring MVC的jar,也需添加依赖,此处不描述)
作用:spring mvc底层解析json成java类,用的就是jsckson的jar包,不依赖它肯定也是无法成功解析的啦。
com.fasterxml.jackson.core
jackson-databind
2.4.1
org.codehaus.jackson
jackson-core-lgpl
1.8.1
org.codehaus.jackson
jackson-mapper-lgpl
1.8.1
5. Controller的方法
指定接收参数类型为application/json。(我把这个指定去掉也正确接收了,还是加上吧)
@RequestMapping(value = "/test", method = RequestMethod.POST, consumes = "application/json")public@ResponseBody RequestResult test(@RequestBody User user) {//....
}
至此,@RequestBody就可以正确的接收到参数了。