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

});

这很好用(例如,感谢所有回答者,注释已经可以使用了)

但是,我该如何做反向路径:是否已使用RequestBody将JSON序列化回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>

它似乎有效!我不知道该技巧到底是什么,但它可以起作用…

回答:

这是一个工作示例:

Maven POM

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">

<modelVersion>4.0.0</modelVersion><groupId>test</groupId><artifactId>json</artifactId><packaging>war</packaging>

<version>0.0.1-SNAPSHOT</version><name>json test</name>

<dependencies>

<dependency><!-- spring mvc -->

<groupId>org.springframework</groupId><artifactId>spring-webmvc</artifactId><version>3.0.5.RELEASE</version>

</dependency>

<dependency><!-- jackson -->

<groupId>org.codehaus.jackson</groupId><artifactId>jackson-mapper-asl</artifactId><version>1.4.2</version>

</dependency>

</dependencies>

<build><plugins>

<!-- javac --><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-compiler-plugin</artifactId>

<version>2.3.2</version><configuration><source>1.6</source><target>1.6</target></configuration></plugin>

<!-- jetty --><plugin><groupId>org.mortbay.jetty</groupId><artifactId>jetty-maven-plugin</artifactId>

<version>7.4.0.v20110414</version></plugin>

</plugins></build>

</project>

在文件夹src / main / webapp / WEB-INF中

web.xml

<web-app xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"

version="2.4">

<servlet><servlet-name>json</servlet-name>

<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>

<load-on-startup>1</load-on-startup>

</servlet>

<servlet-mapping>

<servlet-name>json</servlet-name>

<url-pattern>/*</url-pattern>

</servlet-mapping>

</web-app>

json-servlet.xml

<beans xmlns="http://www.springframework.org/schema/beans"

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xsi:schemaLocation="http://www.springframework.org/schema/beans

http://www.springframework.org/schema/beans/spring-beans.xsd">

<import resource="classpath:mvc-context.xml" />

</beans>

在文件夹src / main / resources中:

mvc-context.xml

<beans xmlns="http://www.springframework.org/schema/beans"

xmlns:mvc="http://www.springframework.org/schema/mvc" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xmlns:context="http://www.springframework.org/schema/context"

xsi:schemaLocation="http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd

http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd

http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd">

<mvc:annotation-driven />

<conte

```xt:component-scan base-package="test.json" />

</beans>

在文件夹src / main / java / test / json中

TestController.java

@Controller

@RequestMapping(“/test”)

public class TestController {

@RequestMapping(method = RequestMethod.POST, value = "math")

@ResponseBody

public Result math(@RequestBody final Request request) {

final Result result = new Result();

result.setAddition(request.getLeft() + request.getRight());

result.setSubtraction(request.getLeft() - request.getRight());

result.setMultiplication(request.getLeft() * request.getRight());

return result;

}

}

Request.java

public class Request implements Serializable {

private static final long serialVersionUID = 1513207428686438208L;

private int left;

private int right;

public int getLeft() {return left;}

public void setLeft(int left) {this.left = left;}

public int getRight() {return right;}

public void setRight(int right) {this.right = right;}

}

Result.java

public class Result implements Serializable {

private static final long serialVersionUID = -5054749880960511861L;

private int addition;

private int subtraction;

private int multiplication;

public int getAddition() { return addition; }

public void setAddition(int addition) { this.addition = addition; }

public int getSubtraction() { return subtraction; }

public void setSubtraction(int subtraction) { this.subtraction = subtraction; }

public int getMultiplication() { return multiplication; }

public void setMultiplication(int multiplication) { this.multiplication = multiplication; }

}

你可以通过`mvn jetty:run`在命令行上执行,然后发送POST请求来测试此设置:

URL: http://localhost:8080/test/math

mime type: application/json

post body: { “left”: 13 , “right” : 7 }

我使用了海报Firefox插件来执行此操作。

响应如下所示:

{“addition”:20,”subtraction”:6,”multiplication”:91}

```

以上是 jQuery,Spring MVC @RequestBody和JSON-协同工作 的全部内容, 来源链接: utcz.com/qa/420326.html

回到顶部