考虑以下json
文档:
{
"a": {
"one": "1",
"two": "2"
},
"b": {
"three": "3",
"four": "4",
}
}
我需要将其解除以下POJO:
class Root{
@JsonAlias({"a","b"})
Node1 node1;
@JsonAlias({"a","b"})
Node2 node2;
}
class Node1 {
String one;
String three;
}
class Node2 {
String two;
String four;
}
看起来嵌套节点(a
和b
)只能在mapper.readValue
期间遍历一次。如果我从node1
删除@JsonAlias({"a","b"})
,并且node2
从node2
删除@JsonAlias({"a","b"})
,则杰克逊仅填充node1
。
如果我在两者上留下注释,则只会填充其中一个。
是否支持此映射?如果没有,那么解决方法应该是什么?
我使用的是杰克逊2.9.1
答案 0 :(得分:1)
@JsonAlias
仅适用于带注释的字段,例如node1
,node2
。它不会导致杰克逊在Node1
和Node2
类中查找字段。例如,在解析类Node1
的对象时,无论使用何种别名,它都会期望字段one
和three
,并且无法找到它们。我推荐这套注释:
class Root {
@JsonAlias("a")
Node1 node1;
@JsonAlias("b")
Node2 node2;
}
class Node1 {
String one;
@JsonAlias("two")
String three;
}
class Node2 {
@JsonAlias("three")
String two;
String four;
}
然后你可以在你的问题中解析JSON文档。