【问题标题】:How to deserialize JSON response from Jersey REST service to collection of java objects如何将来自 Jersey REST 服务的 JSON 响应反序列化为 Java 对象的集合
【发布时间】:2011-09-14 10:59:09
【问题描述】:

我编写的客户端使用 Jersey 客户端 API 向 REST 服务发出 GET 请求。 响应是对象的集合,我需要反序列化它。这是我的代码:

    ClientConfig clientConfig = new DefaultClientConfig();
    clientConfig.getFeatures().put(JSONConfiguration.FEATURE_POJO_MAPPING,
            Boolean.TRUE);
    Client client = Client.create(clientConfig);
    WebResource r = client
            .resource("http://localhost:8080/rest/gadgets");

和代表“小工具”模型的类(用 @XmlRootElement 注释以进行 JAXB 处理):

    @XmlRootElement
public class Gadget {

    private String url;
    private String title;
    private String name;

    public Gadget() {
}


public String getUrl() {
    return url;
}

public void setUrl(String url) {
    this.url = url;
}


public String getTitle() {
    return title;
}

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

public String getName() {
    return name;
}

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

如果响应只是小工具副本,而不是集合,则可能看起来像

Gadget result = r.get(Gadget.class);

但是响应的 JSON 包含一个小工具列表,我需要将其读取到 java 集合中。像

List<Gadget> result = r.get(List<Gadget>.class);

不编译。有人可以在这里帮助我吗? 我不想使用任何额外的库,我相信这可以使用 jersey-json.jar 和 JAXB 来完成,但不知道如何。

【问题讨论】:

    标签: java json jersey


    【解决方案1】:

    我认为你想使用GenericType 的匿名子类:

    r.get(new GenericType<List<Gadget>>() {});
    

    List&lt;Gadget&gt;.class 因类型擦除而无法工作。

    【讨论】:

      【解决方案2】:

      对于序列化和/或反序列化,您可以为您的对象创建 JSON 外观类,这将帮助您序列化和反序列化对象。

      而且我建议不要在通过某些 serverlet 或网络的对象中使用集合,它会使传输对象非常重,而是使用普通数组。这将缓解您的问题。

      【讨论】:

        【解决方案3】:

        你试过了吗

        Gadget[] result = r.get(Gadget[].class);
        

        以上对我有用。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2015-02-13
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-05-31
          • 1970-01-01
          相关资源
          最近更新 更多