Jersey POST Rest服务无法接受包含HashMap的对象

时间:2017-07-13 08:07:52

标签: java json rest jersey

我创建了一个简单的POST REST Web服务,它使用一个名为Track的复合对象来包含其中的HashMap。 但是,当我使用POSTMAN测试它并传递JSON字符串时,它不会将json中存在的hashmap反序列化为下面定义的TestObj POJO 当我调试代码时,我看到地图为空,其他值已填充。

这是代码

// Java类定义

@XmlRootElement
public class Track {
String title;
String singer;
TestObj test;

public TestObj getTest() {
    return test;
}

public void setTest(TestObj test) {
    this.test = test;
}

public String getTitle() {
    return title;
}

public void setTitle(String title) {
    this.title = title;
}

public String getSinger() {
    return singer;
}

public void setSinger(String singer) {
    this.singer = singer;
}

@Override
public String toString() {
    return "Track [title=" + title + ", singer=" + singer + "]";
}

}

public class TestObj {
String name;
Map<String,String> testMap;

public Map<String, String> getTestMap() {
    return testMap;
}

public void setTestMap(Map<String, String> testMap) {
    this.testMap = testMap;
}

public String getName() {
    return name;
}

public void setName(String name) {
    this.name = name;
}
}

//输入我从POSTMAN传递的JSON字符串

{     “标题”:“进入桑德曼”,     “歌手”:“Metallica”,     “测试”:{         “名字”:“约翰”,         “testMap”:{             “1”:“1”,             “2”:“2”         }     } }

我的REST POST服务

@POST
@Path("/posttrack")
@Consumes(MediaType.APPLICATION_JSON)
public Response createTrackInJSON(Track track) {

    String result = "Track  " + track;
    return Response.status(201).entity(result).build();

}

2 个答案:

答案 0 :(得分:0)

确切的失败是什么?我想这是典型的错误,它无法反序列化接口,你必须准确定义它在JSON中的实现,参见https://stackoverflow.com/a/14402856/5471574

答案 1 :(得分:0)

将泽西版更新为1.19并在web.xml中添加以下内容以跳过使用@XmlRootElement

   <init-param>
        <param-name>com.sun.jersey.api.json.POJOMappingFeature</param-name>
        <param-value>true</param-value>
    </init-param>

<dependency>
  <groupId>com.sun.jersey</groupId>
  <artifactId>jersey-server</artifactId>
  <version>1.19</version>
</dependency>

<dependency>
  <groupId>com.sun.jersey</groupId>
  <artifactId>jersey-bundle</artifactId>
  <version>1.19</version>
</dependency>

<dependency>
  <groupId>com.sun.jersey</groupId>
  <artifactId>jersey-json</artifactId>
  <version>1.19</version>
</dependency>

较旧版本的球衣并不支持解散hashmap