我创建了一个简单的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();
}
答案 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