JQuery、Spring MVC @RequestBody 和 JSON - 使其协同工作
我想要一个双向 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 序列化为使用 RequestBody 返回 Java 对象?
无论我尝试什么,我都无法让这样的东西工作:
@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...)
}
我正确配置了Jackson(它在退出时序列化)并且我将MVC设置为注释驱动当然
我如何使其工作?这有可能吗?或者 Spring / JSON / JQuery 是单向的(out)?
更新:
我将此杰克逊设置更改
<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>
并且它似乎有效!我不知道这个伎俩到底做了什么,但它确实有效......
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(5)
我很确定你只需要注册
MappingJacksonHttpMessageConverter
(最简单的方法是通过
来实现的XML 中的
或 Java 中的@EnableWebMvc
)参见:
这是一个工作示例:
Maven POM
in文件夹 src/main/webapp/WEB-INF
web.xml
json-servlet.xml
在文件夹 src/main/resources 中:
mvc-context.xml
在文件夹 src/main/java/test/json
TestController.java
Request.java >
Result.java
您可以通过在命令行上执行
mvn jetty:run
来测试此设置,然后发送 POST 请求:我使用了 Poster Firefox 插件 即可执行此操作。
响应如下所示:
I'm pretty sure you only have to register
MappingJacksonHttpMessageConverter
(the easiest way to do that is through
<mvc:annotation-driven />
in XML or@EnableWebMvc
in Java)See:
Here's a working example:
Maven POM
in folder src/main/webapp/WEB-INF
web.xml
json-servlet.xml
in folder src/main/resources:
mvc-context.xml
In folder src/main/java/test/json
TestController.java
Request.java
Result.java
You can test this setup by executing
mvn jetty:run
on the command line, and then sending a POST request:I used the Poster Firefox plugin to do this.
Here's what the response looks like:
此外,您还需要确保您
的 SPring 配置 xml 中有。
我还建议您阅读这篇博文。这对我帮助很大。
Spring 博客 - Spring 3.0 中的 Ajax 简化< /a>
更新:
刚刚检查了我的工作代码,其中
@RequestBody
工作正常。我的配置中也有这个 bean:
也许很高兴看到
Log4j
所说的内容。它通常会提供更多信息,根据我的经验,如果您的请求的内容类型不是Application/JSON
,@RequestBody
将会失败。您可以运行 Fiddler 2 来测试它,甚至 Mozilla Live HTTP headers 插件也可以提供帮助。In Addition you also need to be sure that you have
in your SPring configuration xml.
I also would recommend you to read this blog post. It helped me alot.
Spring blog - Ajax Simplifications in Spring 3.0
Update:
just checked my working code where I have
@RequestBody
working correctly.I also have this bean in my config:
May be it would be nice to see what
Log4j
is saying. it usually gives more information and from my experience the@RequestBody
will fail if your request's content type is notApplication/JSON
. You can run Fiddler 2 to test it, or even Mozilla Live HTTP headers plugin can help.除了这里的答案...
如果您在客户端使用 jquery,这对我有用:
Java:
Jquery(您需要包含 Douglas Crockford 的 json2.js 才能具有 JSON.stringify 函数):
In addition to the answers here...
if you are using jquery on the client side, this worked for me:
Java:
Jquery (you need to include Douglas Crockford's json2.js to have the JSON.stringify function):
如果您不想自己配置消息转换器,则可以使用 ,将 Jackson 添加到类路径中,Spring 将默认为您提供 JSON、XML(以及一些其他转换器)。此外,您还将获得一些其他常用的转换、格式化和验证功能。
@EnableWebMvc 或
If you do not want to configure the message converters yourself, you can use either
@EnableWebMvc or <mvc:annotation-driven />, add Jackson to the classpath and Spring will give you both JSON, XML (and a few other converters) by default. Additionally, you will get some other commonly used features for conversion, formatting and validation.
如果您愿意使用 Curl 进行 JSON 2 和 Spring 3.2.0 的调用,请查看常见问题解答 此处。由于 AnnotationMethodHandlerAdapter 已被弃用并被 RequestMappingHandlerAdapter 取代。
In case you are willing to use Curl for the calls with JSON 2 and Spring 3.2.0 in hand checkout the FAQ here. As AnnotationMethodHandlerAdapter is deprecated and replaced by RequestMappingHandlerAdapter.