我编写了使用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");
和代表“gadget”模型的类(使用@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副本而不是集合,则可能看起来像
Gadget result = r.get(Gadget.class);
但是响应中的JSON包含一个小工具列表,我需要将其读取到java集合中。像
这样的东西List<Gadget> result = r.get(List<Gadget>.class);
无法编译。有人可以帮我吗? 我不想使用任何额外的库,我相信这可以使用jersey-json.jar和JAXB完成,但不知道如何。
答案 0 :(得分:16)
答案 1 :(得分:0)
对于序列化和/或反序列化,您可以为yout对象创建JSON外观类,这将帮助您对序列进行序列化和反序列化。
我建议不要在通过某些servlet或网络的对象中使用集合,它会使运输对象非常繁重,而是使用普通数组。这将缓解你的问题。
答案 2 :(得分:0)
你试过吗
Gadget[] result = r.get(Gadget[].class);
以上对我有用。