如何将Jersey REST服务的JSON响应反序列化为java对象的集合

Mik*_*ail 10 java json jersey

我编写了使用Jersey Client 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");
Run Code Online (Sandbox Code Playgroud)

和表示"小工具"模型的类(使用@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;
    }
}
Run Code Online (Sandbox Code Playgroud)

如果响应只是Gadget副本而不是集合,那么可能看起来像

Gadget result = r.get(Gadget.class);
Run Code Online (Sandbox Code Playgroud)

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

List<Gadget> result = r.get(List<Gadget>.class);
Run Code Online (Sandbox Code Playgroud)

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

小智 17

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

r.get(new GenericType<List<Gadget>>() {});
Run Code Online (Sandbox Code Playgroud)

List<Gadget>.class 因为类型擦除而无法工作.