泽西岛 - 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 正在生成 key
和 value
元素,而我希望它是 key: value
并且它没有正确生成二级对象在 API.
提供的 JSON 结构中
MOXy 是 JAXB 实现,而 JsonObject
是 JSON-P 的一部分。 MOXy 碰巧也能够处理 JSON,但这是对 JAXB 标准的专有扩展。据我所知,JSON-P 和 JAXB 之间没有可用的默认映射。您看到这些 key
/value
条目的原因一定是因为 JsonObject
扩展了 java.util.Map
,因此您获得了该类型的默认 MOXy 映射。
我认为你有以下几种可能:
- 使用 JSON-P 或 JAXB/MOXy(额外的 JSON 绑定需要 MOXy)仅。
- 使用 JAXB/MOXy 机制之一映射自定义类型 from/to JAXB。标准方法是使用
XmlAdapter
,特别是处理 Map
的示例是 here and here。但我认为如果您不了解第 3 方内容的结构并希望保持嵌套级别完整,这将很困难。
另一种可能是使用像 Jackson 这样的专有 API,但我对此无能为力。
我有一个 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 正在生成 key
和 value
元素,而我希望它是 key: value
并且它没有正确生成二级对象在 API.
MOXy 是 JAXB 实现,而 JsonObject
是 JSON-P 的一部分。 MOXy 碰巧也能够处理 JSON,但这是对 JAXB 标准的专有扩展。据我所知,JSON-P 和 JAXB 之间没有可用的默认映射。您看到这些 key
/value
条目的原因一定是因为 JsonObject
扩展了 java.util.Map
,因此您获得了该类型的默认 MOXy 映射。
我认为你有以下几种可能:
- 使用 JSON-P 或 JAXB/MOXy(额外的 JSON 绑定需要 MOXy)仅。
- 使用 JAXB/MOXy 机制之一映射自定义类型 from/to JAXB。标准方法是使用
XmlAdapter
,特别是处理Map
的示例是 here and here。但我认为如果您不了解第 3 方内容的结构并希望保持嵌套级别完整,这将很困难。
另一种可能是使用像 Jackson 这样的专有 API,但我对此无能为力。