与Jackson收集未知属性

zpjtge22  于 2022-11-08  发布在  其他
关注(0)|答案(2)|浏览(144)

我使用Jackson从JSON创建Java对象。假设我有一个如下所示的JSON字符串:

{"a":"a", "b":"b", "c":"c"}

还有一个像这样的pojo:

@JsonIgnoreProperties(ignoreUnknown = true)
public class A {

    private String a;
    private String b;

    // ...
}

所以c显然是一个未知的属性--它将被遗漏。我想知道,有没有什么办法我可以记录c是未知的,被忽略了?

lyr7nygr

lyr7nygr1#

我不知道有什么内置的工具可以做到这一点。
标记注解,可用于定义非静态的双参数方法(属性的第一个参数名称,要设置的第二个值),该方法将用作从JSON内容中找到的所有无法识别的属性的“回退”处理程序。
使用它就像

@JsonAnySetter
public void ignored(String name, Object value) {
    // can ignore the 'value' if you only care for the name (though you still need the second parameter)
    System.out.println(name + " : " + value);
}

在您要还原序列化的目的类别中,例如您的A类别。

cx6n0qe3

cx6n0qe32#

@JsonAnySetter用于Map字段时,将捕获所有未Map的属性。与@JsonAnyGetter成对使用时,将用于序列化和反序列化:

@JsonAnyGetter
@JsonAnySetter
private Map<String, Object> dynamicValues = new LinkedHashMap<>();

相关问题