简体   繁体   中英

Collecting unknown properties with Jackson

I'm using Jackson for creating Java objects from JSON. Let's suppose I have a JSON string like this:

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

And a pojo like this:

@JsonIgnoreProperties(ignoreUnknown = true)
public class A {

    private String a;
    private String b;

    // ...
}

So c is clearly an unknown property - and it will be left out. I was wondering, is there any way I can log that c was unknown and ignored?

I don't know of any built-in tool that does this. You can write your own with @JsonAnySetter

Marker annotation that can be used to define a non-static, two-argument method (first argument name of property, second value to set), to be used as a "fallback" handler for all otherwise unrecognized properties found from JSON content.

Use it like

@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);
}

within the class you're deserializing to, eg. your A class.

@JsonAnySetter when used on a Map field would catch all unmapped properties. When paired with @JsonAnyGetter would work for serialization and deserialization:

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

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM