0

考虑以下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;
}

看起来嵌套节点 (ab) 只能在mapper.readValue. 只有当我从node1中删除且仅当我从.@JsonAlias({"a","b"})node2node2@JsonAlias({"a","b"})node1

如果我在两者上都保留注释,则只会填充其中一个。

是否支持此映射?如果没有,解决方法应该是什么?

我正在使用杰克逊 2.9.1

4

1 回答 1

1

@JsonAlias仅适用于带注释的字段,在您的情况下node1node2. 它不会导致 Jackson 在Node1Node2类中查找字段。例如,在解析类的对象时,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 文档。

于 2017-10-19T13:25:51.823 回答