我必须使用 JAX-RS (Resteasy 作为实现)将 JSON 映射到 Java PoJos。问题是 JSON 是动态的。看这个例子:
{
"typeCode": "SAMPLE",
"data": [
{
"id": "COMMENTS",
"answerValue": {
"type": "YesNoAnswer",
"value": true
}
},
{
"id": "CHOICE",
"answerValue": {
"type": "SelectListAnswer",
"values": ["choice1", "choice2"]
}
}
]
}
动态元素位于数据数组中。原则上,每个条目都有一个 ID 和一个 answerValue。但答案值是动态的。根据他的类型,他可以有一个值(布尔值、字符串、数字、对象)或值数组。
如何将其映射到我的 Java 模型?
我建议你通过获取来处理它answerValue
节点作为JsonNode
type,然后手动处理成你需要的Java类型。
大致如下:
class Data {
public String typeCode;
public List<Answer> data;
}
class Answer {
public String id;
public void setAnswerValue(JsonNode node) {
String type = node.path("type").asText();
switch (type) {
case "YesNoAnswer" :
boolean value = node.path("value").asBoolean();
// TODO Handle
break;
case "SelectListAnswer" :
JsonNode values = node.path("values");
for (JsonNode v : values) {
String s = v.textValue();
// TODO Handle
}
break;
}
}
}
然后可以使用以下命令读取您的输入ObjectMapper
:
ObjectMapper om = new ObjectMapper();
Data data = om.readValue(input, Data.class);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)