嵌套泛型的Jersey JSON编组产生null

时间:2013-05-30 19:47:53

标签: java json generics jersey jax-rs

尝试使用Jersey 1.11将一个嵌套在List中的HashMap编组到JSON中时遇到问题。

以下是Jersey端点的片段,它通过返回的Response对象生成MediaType.APPLICATION_JSON:

DataDTO.java

@XmlRootElement
public class DataDTO {
  ...
  private List<GenericEntity<HashMap<String, String>> dataHierarchy;

  public List<GenericEntity<HashMap<String, String>> getDataHierarchy() { return dataHierarchy; }
  public void setDataHierarchy(List<GenericEntity<HashMap<String, String>> dh) { dataHierarchy = dh; }
}

泽西岛资源类:

@Get
@Produces(MediaType.APPLICATION_JSON)
@Path("/summary")
public Response getSummary() {
  ....
  DataDTO dto = new DataDTO();
  List<GenericEntity<HashMap<String,String>>> genericEntityList = new ArrayList<>();
  for (HashMap<String, String> hashMapEntity : summary.getDataHierarchy()) {
      GenericEntity<HashMap<String, String>> genericEntity = new GenericEntity<HashMap<String, String>>(hashMapEntity) {};
      genericEntityList.add(genericEntity);
  }
  dto.setDataHierarchy(genericEntityList);
  return Response.ok(dto).build();
}

DTO是'自然类集'的一部分,其JAXBContext解析器上下文配置为使用自然表示法和根解包,如下所示:

new JSONJAXBContext(JSONConfiguration.natural().rootUnwrapping(true).build(),
                    naturalClassSet.toArray(new Class[naturalClassSet.size()]));

例如,当列表中有5个条目时,响应JSON最终看起来像这样:

{"dataHierarychy":[null, null, null, null, null]}

我也尝试更改DataDTO的dataHierarchy属性,以便每个通用数据结构都包含在GenericEntity中:

private GenericEntity<List<GenericEntity<HashMap<String,String>>>>

这导致简单:

{"dataHierarychy":null}

0 个答案:

没有答案