泽西岛 - Moxy 返回附加 json in class 属性

Jersey - Moxy returning appended json in class property

我有一个 Jersey 客户端调用第 3 方休息 api 并检索一些 JSON.

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

之后我需要将此 JSON 附加到我的回复 class 并在回复中返回。

@XmlRootElement
public class MyResponse {

    private JsonObject body;
    private String status;

我设法将来自第 3 方 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 结构中

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 机制之一映射自定义类型 from/to JAXB。标准方法是使用 XmlAdapter,特别是处理 Map 的示例是 here and here。但我认为如果您不了解第 3 方内容的结构并希望保持嵌套级别完整,这将很困难。

另一种可能是使用像 Jackson 这样的专有 API,但我对此无能为力。