Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Collecting unknown properties with Jackson

Tags:

java

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?

like image 446
TamasGyorfi Avatar asked Jul 01 '15 14:07

TamasGyorfi


2 Answers

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.

like image 135
Sotirios Delimanolis Avatar answered Oct 21 '22 02:10

Sotirios Delimanolis


@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<>();
like image 3
Andrey Avatar answered Oct 21 '22 02:10

Andrey