Jersey:如何使用嵌套对象作为JSON打印通用对象?

时间:2016-04-28 22:59:48

标签: java json generics jaxb jersey

目前我正在打印我的Podcast API的输出:

{
  "data":[{"feed":"someUrl","id":1,"name":"someName"}],
  "success":true
}

我有一个响应对象用于生成具有“数据”和“成功”的对象,并且我有一个PodcastResponse对象用于播客对象,其中包含“feed”,“id”,“name”。

@XmlRootElement()
@XmlSeeAlso(PodcastResponse.class)
public class Response {
  @XmlElement
  boolean success = true;
  @XmlElement      
  List<PodcastResponse> data;
  //Getters, Setters, etc.
}

@XmlRootElement()
public class PodcastResponse {
  @XmlElement
  int id;
  @XmlElement
  String name;
  @XmlElement
  String feed_url;
  //Getters, Setters, etc.
}

这会生成输出:

@GET
@Produces(MediaType.APPLICATION_JSON)
public Response getPodcasts() {
  return new Response(true, PodcastManager.getPodcasts());
}

这确实有效。现在我想生成Response类,以便我可以使用它而不是PodcastResponse类。

@XmlRootElement()
public class Response<T> {
  @XmlElement
  boolean success = true;
  @XmlElement
  List<T> data;
  //Getters, Setters, etc.
}

这不能按预期工作,输出:

{
  "data": ["PodcastResponse@93a281a"],
  "success":true
}

如何编写通用的响应类,以便在JSON格式中显示各种数据?

1 个答案:

答案 0 :(得分:2)

使用可与Jersey一起使用的JAXB Annotations将Java对象序列化为XML或JSON。这是一个列出how to的页面。

 @XmlRootElement()
 public class PodcastResponse {
   int id;
   String name;
   String feed_url;
   //Getters, Setters, etc.
 }