I'm getting an exception when sending JSON over to a Spring Annotated Controller. I believe the problem is related to converting a JSON into a RequestBody. I am unable to switch to full MVC Annotations - I have to use SimpleUrlHandlerMapping for now
This is the form + javascript modified from mvc-ajax sampleCode:2010-02-15 16:59:53,437 ERROR [ingExceptionResolver][TP-Processor2 ] Error thrown while executing request org.springframework.web.HttpMediaTypeNotSupportedException: Content type 'application/json;charset=UTF-8' not supported at org.springframework.web.bind.annotation.support.HandlerMethodInvoker.resolveRequestBody(HandlerMethodInvoker.java:556) at org.springframework.web.bind.annotation.support.HandlerMethodInvoker.resolveHandlerArguments(HandlerMethodInvoker.java:283) at org.springframework.web.bind.annotation.support.HandlerMethodInvoker.invokeHandlerMethod(HandlerMethodInvoker.java:163) at org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.invokeHandlerMethod(AnnotationMethodHandlerAdapter.java:414) at org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.handle(AnnotationMethodHandlerAdapter.java:402) at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:771) at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:716) at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:647) at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:563) at javax.servlet.http.HttpServlet.service(HttpServlet.java:647)
http://blog.springsource.com/2010/01...in-spring-3-0/
This is a snippet of the server side code:Code:<form:form id="createUser" modelAttribute="user" method="post"> <fieldset> <legend>User Fields</legend> <p> <form:label id="nameLabel" for="name" path="username" cssErrorClass="error">Name</form:label><br/> <form:input path="username" /><form:errors path="name" /> <form:label id="idLabel" for="id" path="id" cssErrorClass="error">Id</form:label><br/> <form:input path="id" /><form:errors path="id" /> </p> <p> <input id="create" type="submit" value="Create" /> </p> </fieldset> </form:form> <script type="text/javascript"> $(document).ready(function() { $("#createUser").submit(function() { var user = $(this).serializeObject(); $.postJSON("user", user, function(data) { $("#id").val(data.id); alert("got response"); }); return false; }); }); </script>
I had a problem using <mvc:annotation-driven/> on it's own, I read somewhere that I need to declare SimpleControllerHandlerAdapter as well.Code:@Controller(value="accountsController") public class AccountController { .... @RequestMapping(method=RequestMethod.POST) public @ResponseBody Map<String, ? extends Object> create(@RequestBody User user, HttpServletResponse response) { return Collections.singletonMap("id", user.getId()); } }
Any help would be appreciatedCode:<bean id="urlMapping" class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping"> <property name="mappings"> <props> .... <prop key="/accounts/**/*">accountsController</prop> .... </props> </property> <property name="alwaysUseFullPath" value="true"/> </bean> <bean class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping" /> <bean class="org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter" /> <bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter"> <property name="messageConverters"> <util:list id="beanList"> <bean id="stringHttpMessageConverter" class="org.springframework.http.converter.StringHttpMessageConverter"/> <bean id="formHttpMessageConverter" class="org.springframework.http.converter.FormHttpMessageConverter"/> <bean id="byteArrayMessageConverter" class="org.springframework.http.converter.ByteArrayHttpMessageConverter"/> <bean id="bufferedImageHttpMessageConverter" class="org.springframework.http.converter.BufferedImageHttpMessageConverter"/> <bean id="jacksonMessageConverter" class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter"/> </util:list> </property> </bean>
Thanks


Reply With Quote
