【问题标题】:Jersey POST Rest service not able to accept an object containing a HashMapJersey POST Rest 服务无法接受包含 HashMap 的对象
【发布时间】:2017-07-13 08:07:52
【问题描述】:

我创建了一个简单的 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 字符串

{ "title": "进入睡魔", “歌手”:“金属乐队”, “测试”: { “姓名”:“约翰”, “测试地图”:{ “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();

}

【问题讨论】:

  • 地图是 {null} 还是空地图,即它已构建,但没有条目?
  • [它的空地图]
  • 这方面有什么更新吗?

标签: java json rest jersey


【解决方案1】:

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

【讨论】:

  • 没有失败,但是当我调试时,我看到我在 TestObj POJO 中的 testMap 是空的。它包含我在输入 json 中传递的值
【解决方案2】:

将球衣版本更新到 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>

旧版本的 jersey 不支持解组 hashmap

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-12-21
    • 2016-12-02
    • 1970-01-01
    • 1970-01-01
    • 2012-05-01
    • 2019-10-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多