Spring MVC:如何用JSON填充我的Object

时间:2014-08-11 15:45:15

标签: java json spring rest spring-mvc

我有一个期望对象的更新方法(AJAX服务)。这个对象由JSon填充,我想测试它,但我不能......

我使用spring mvc来设置我的服务。

我的服务:

    @RequestMapping(value="texte/updateMyObject", method= RequestMethod.POST, consumes = "application/json;charset=UTF-8")
    public void updateMyObject(MyObject myObject) throws IOException {

        logger.info("UPDATE !!!");

    }

我的对象:

public class MyObject {
private Integer id;
private String name;

public MyObject(){}

// getter & setter

}

我使用Postman(Chrome工具)来测试我的服务:https://chrome.google.com/webstore/detail/postman-rest-client/fdmmgilgnpjigdojojpjoooidkmcomcm

我想我必须发送好的JSON,但我不知道哪一个。

目前我测试了这种模式:

"MyObject" : {"id" : "1", "name" : "test"}

或     {" ID" :" 1"," name" :"测试"}

修改1:

调用我的服务时,myObject的字段都为空。

编辑2:

我播放这种HTTP请求:

POST /myapp/texte/updateMyObject.sp HTTP/1.1
Host: localhost:8080
Content-Type: application/json; charset=UTF-8
Cache-Control: no-cache

{"id" : "1", "name" : "test"}

编辑3:

我的web.xml中的配置弹出。如果你需要我的背景问我。

<servlet>
    <servlet-name>springMvc</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <init-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>classpath*:spring/applicationContext-springmvc.xml</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
</servlet>

<servlet-mapping>
    <servlet-name>springMvc</servlet-name>
    <url-pattern>*.sp</url-pattern>
</servlet-mapping>

编辑4: 我做了以下测试,向您显示我的对象没有填充。

enter image description here

2 个答案:

答案 0 :(得分:2)

您需要将JSON de / serializer库链接到您的项目,例如杰克逊:

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

然后,使用以下控制器:

@RequestMapping(value = "texte/updateMyObject", method = RequestMethod.POST, consumes = "application/json")
public void updateMyObject(@RequestBody MyObject myObject) {
    // ...
}

发送请求时:

POST /texte/updateMyObject
    headers:
        Content-Type: application/json
    data:
        { "id" : "1", "name" : "test" }

myObject应填补。

答案 1 :(得分:0)

所有关于控制器将接收的JSON文档中的属性名称。

在您的操作参数上,参数的类型必须具有与将接收的JSON文档上的字段名称匹配的属性。

例如:看看这个动作:

@RequestMapping(value="texte/updateMyObject", method=RequestMethod.POST)
String doSomething(Person person) {

}

人员班级将如下所示:

class Person {
   String name;
   int age;

   //getters and setters
}

您的JSON文档必须是这样的:

  

{'name':'Henrique','age':35}