2016年8月25日木曜日

[Jackson]デシリアライズ時に発生するUnrecognizedPropertyExceptionを抑止する

Jacksonを使って、jsonをBeanにデシリアライズするときに、jsonには存在しているけどBeanに存在しない属性があるとUnrecognizedPropertyExceptionが発生する。
これを、Jacksonに対する設定で、一括で無効にする方法。

Jacksonのバージョン
compile 'com.fasterxml.jackson.core:jackson-databind:2.8.1'

入力のjson
{"name": "あいうえお"}

beanの定義
class Sample {

    private String name;

    private int age;

    @Override
    public String toString() {
        return "Sample{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }
}

Jacksonを使ったデシリアライズ処理
jsonにだけ存在する属性があった場合に例外を発生させる設定を無効化する設定を行う。
無効化する設定はDeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES
final ObjectMapper mapper = new ObjectMapper();

// beanに存在しない属性があっても無視する(例外を発生させない)
mapper.disable(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES);

final String content = "{\"name\": \"あいうえお\"}";
final Sample sample = mapper.readValue(content, Sample.class);

System.out.println("sample = " + sample);


結果
sample = Sample{name='null', age=0}