Spring 4 Controller不将JSON转换为Java类
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Spring 4 Controller不将JSON转换为Java类相关的知识,希望对你有一定的参考价值。
我正在尝试使用Spring将JSON转换为java类。当我执行代码时,我收到400个错误请求。如果我用通用java Oject(@RequestBody final **User** user
)替换User java对象(@RequestBody final **Object** user
),我将json字符串作为参数。
这是我的代码。
使用javascript:
register : function(usr,pwd) {
var user = {username : usr, password: pwd}
return $http({
method: 'POST',
url: '/SpringSecurityRememberMeAnnotationExample/newuser',
contentType: "application/json",
data:user
});
/*
return $http.post('/SpringSecurityRememberMeAnnotationExample/newuser', user).then(function(response) {
return response.data;
});
*/
},
控制器:
@Controller
@Scope("request")
public class HomeController {
@RequestMapping(value = "/newuser", method = RequestMethod.POST)
@ResponseBody public User SaveUser(@RequestBody final User user){
System.out.println("username: ");// + user.username);
System.out.println("password: ");// + user.password);
return null;
}
弹簧mvc.xml
<mvc:annotation-driven/>
<mvc:default-servlet-handler/>
<!-- Login Interceptor -->
<mvc:interceptors>
<mvc:interceptor>
<mvc:mapping path="/**"/>
<bean class="com.websystique.springsecurity.interceptor.LoginInterceptor"/>
</mvc:interceptor>
<!-- workaround to fix IE8 problem -->
<bean id="webContentInterceptor"
class="org.springframework.web.servlet.mvc.WebContentInterceptor">
<property name="cacheSeconds" value="0"/>
<property name="useExpiresHeader" value="true"/>
<property name="useCacheControlHeader" value="true"/>
<property name="useCacheControlNoStore" value="true"/>
</bean>
</mvc:interceptors>
<!-- i18n -->
<bean id="messageSource" class="org.springframework.context.support.ReloadableResourceBundleMessageSource">
<property name="useCodeAsDefaultMessage" value="true"/>
<property name="basename" value="WEB-INF/i18n"/>
<property name="defaultEncoding" value="UTF-8"/>
<property name="fileEncodings" value="UTF-8" />
</bean>
<bean id="localeResolver" class="org.springframework.web.servlet.i18n.FixedLocaleResolver">
<property name="defaultLocale" value="it"/>
<property name="useCodeAsDefaultMessage" value="true"/>
</bean>
<!-- Exception handler -->
<bean id="exceptionResolver"
class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver">
<property name="exceptionMappings">
<props>
<prop key="LoginRequiredException">
public/loginRequired
</prop>
<prop key="ResourceNotFoundException">
public/notFound
</prop>
</props>
</property>
<property name="defaultErrorView" value="rescues/general" />
</bean>
<!-- View Handler -->
<bean id="jspViewResolver"
class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="viewClass"
value="org.springframework.web.servlet.view.JstlView" />
<property name="prefix" value="/WEB-INF/views/" />
<property name="suffix" value=".jsp" />
<property name="order" value="0" />
</bean>
<bean id="jacksonMessageConverter" class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter" />
<bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter">
<property name="messageConverters">
<list>
<ref bean="jacksonMessageConverter"/>
</list>
</property>
</bean>
谢谢!
添加POM.XML配置,json部分
<!-- JSon -->
<dependency>
<groupId>com.fasterxml.jackson.jaxrs</groupId>
<artifactId>jackson-jaxrs-json-provider</artifactId>
<version>2.6.4</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.6.4</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
<version>2.6.4</version>
</dependency>
<dependency>
<groupId>org.codehaus.jackson</groupId>
<artifactId>jackson-mapper-asl</artifactId>
<version>1.9.13</version>
</dependency>
重新检查字段的setter / getters并确保有一个无参构造函数。 (如果你没有构造函数,Java将生成一个默认的无参数,但如果你自己添加了一个带参数的构造函数,你必须注意实现一个无参数)。
主要问题是嵌入在控制器代码上的User类。一旦我在自己的包上创建了User.java文件,一切顺利。
我猜你正在传递格式错误的json对象。你应该传递用户json数据,如下所示。
var user = {"username" : "<username>", "password": "<password>"};
并确保User.java
具有字段和默认构造函数的setter / getter。
请确保您的申请中有两个罐子
杰克逊 - 核心 杰克逊 - 映射器
Spring使用这两个Java API进行XML / JSON处理。
把var user = {"username" : usr, "password": pwd};
放在java脚本中,并确认你的User
类是正确的具有正确的setter getter和正确访问你的调用类。
以上是关于Spring 4 Controller不将JSON转换为Java类的主要内容,如果未能解决你的问题,请参考以下文章
分享spring boot controller统一日志代码
Spring Controller 建议修剪 JSON 数据
为啥@WebMvcTest 不将 Controller-Advices 加载到 Application-Context 中?