I'm tryng to convert JSON into a java class using Spring.
When I execute the code I get 400 bad request.
If I replace User java object (@RequestBody final **User** user) with generic java Oject (@RequestBody final **Object** user), I get the json string as parameter.
Here's my code.
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:
@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;
}
spring-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>
Thank you!
Adding POM.XML config, json part
<!-- 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>
jacksonMessageConverterand theorg.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter. Those are configured automatically.Userclass I think you dont have propper setter getters.static classand not aclass.