Я хотел бы иметь двунаправленную сериализацию JSON-Java
Я успешно использую Путь Java-JSON-JQuery ... (@ResponseBody
), например,
@RequestMapping(value={"/fooBar/{id}"}, method=RequestMethod.GET)
public @ResponseBody FooBar getFooBar(
@PathVariable String id,
HttpServletResponse response , ModelMap model) {
response.setContentType("application/json");
...
}
и в JQuery я использую
$.getJSON('fooBar/1', function(data) {
//do something
});
это работает хорошо (например, аннотации уже работают, спасибо всем ответчикам)
Однако каксделать обратный путь: нужно ли сериализовать JSON обратно в объект Java с помощью RequestBody?
независимо от того, что я пытаюсь, я не могу заставить что-то подобное работать:
@RequestMapping(value={"/fooBar/save"}, method=RequestMethod.POST)
public String saveFooBar(@RequestBody FooBar fooBar,
HttpServletResponse response , ModelMap model) {
//This method is never called. (it does when I remove the RequestBody...)
}
У меня правильно настроен Джексон (он сериализуется при выходе), и у меня установлен MVCконечно, как аннотации
Как мне заставить это работать?Это вообще возможно?или Spring / JSON / JQuery является односторонним (нет)?
Обновление:
Я изменил эту настройку Джексона
<bean id="jsonHttpMessageConverter"
class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter" />
<!-- Bind the return value of the Rest service to the ResponseBody. -->
<bean
class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter">
<property name="messageConverters">
<util:list id="beanList">
<ref bean="jsonHttpMessageConverter" />
<!-- <ref bean="xmlMessageConverter" /> -->
</util:list>
</property>
</bean>
На (почти аналогичную) предложенную
<bean id="jacksonMessageConverter"
class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter"></bean>
<bean
class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter">
<property name="messageConverters">
<list>
<ref bean="jacksonMessageConverter" />
</list>
</property>
</bean>
И, похоже, работает!Я не знаю, что именно сделал трюк, но это работает ...