Jersey - Moxy在类属性中返回附加的json

时间:2015-05-15 00:21:18

标签: java json glassfish jersey moxy

我有一个Jersey客户端调用第三方rest api并检索一些JSON。

{"A":1,"W":2,"List":[{"name":"John","amount":10.0}]}

之后,我需要将此JSON附加到我的响应类并在响应中将其返回。

@XmlRootElement
public class MyResponse {

    private JsonObject body;
    private String status;

我设法将来自第三方API的值分配给body,但是发送的响应是这样的:

{
"status": "success",
"body": {
"entry": [
  {
  "key": "A",
  "value": 1
  }  ,
  {
  "key": "W",
  "value": 2
  },
  {
  "key": "List",
  "value": "[{\"name\":\"John\",\"amount\":10.0}]"
  }
]
}
}

所以有两个主要问题,moxy正在生成keyvalue元素,而我希望它是key: value,而且它还没有正确生成第二级对象API提供的JSON结构。

1 个答案:

答案 0 :(得分:1)

MOXy是一个JAXB实现,而JsonObject是JSON-P的一部分。 MOXy恰好能够处理JSON,但这是JAXB标准的专有扩展。据我所知,JSON-P和JAXB之间没有可用的默认映射。您看到这些key / value条目的原因必须是JsonObject扩展java.util.Map,因此您将获得该类型的默认MOXy映射。

我认为您有以下可能性:

  1. 使用JSON-P或JAXB / MOXy(其附加JSON绑定需要MOXy)
  2. 使用JAXB / MOXy机制之一将自定义类型映射到/到JAXB。标准方法是使用XmlAdapter,处理Map的示例尤为herehere。但是,如果您不了解第三方JSON内容的结构并希望保持嵌套级别不变,我认为这将很难。
  3. 另一种可能性可能是使用像杰克逊这样的专有API,但我无能为力。