收集杰克逊的未知属性

Tam*_*rfi 10 java jackson

我正在使用Jackson从JSON创建Java对象.假设我有一个像这样的JSON字符串:

{"a":"a", "b":"b", "c":"c"}
Run Code Online (Sandbox Code Playgroud)

和这样的pojo:

@JsonIgnoreProperties(ignoreUnknown = true)
public class A {

    private String a;
    private String b;

    // ...
}
Run Code Online (Sandbox Code Playgroud)

所以c显然是一个未知的属性 - 它将被遗漏.我在想,有什么方法可以记录c未知并被忽略了吗?

Sot*_*lis 19

我不知道有任何内置工具可以做到这一点.你可以写自己的@JsonAnySetter

标记注释,可用于定义非静态,双参数方法(属性的第一个参数名称,要设置的第二个值),用作从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);
}
Run Code Online (Sandbox Code Playgroud)

在课程中,你要反序列化,例如.你的A班级.


And*_*rey 7

@JsonAnySetter当用于 Map 字段时将捕获所有未映射的属性。与 配对时@JsonAnyGetter可用于序列化和反序列化:

@JsonAnyGetter
@JsonAnySetter
private Map<String, Object> dynamicValues = new LinkedHashMap<>();
Run Code Online (Sandbox Code Playgroud)