jacksonでデシリアライズする際に未知のプロパティを無視する

大したことじゃないんですけど毎回忘れて調べてる気がするので覚書。
jacksonであるjsonをデシリアライズしたいんだけど、そこに未知のプロパティがあったとき、UnrecognizedPropertyExceptionが発生しちゃうので、それを回避するやつです。


たとえば以下のようなクラスがあったとして。

public class TestJsonBean {
	private String str;
	public String getStr() {
		return str;
	}
	public void setStr(String str) {
		this.str = str;
	}
}


こんなコードでデシリアライズを実行してみます。

ObjectMapper om = new ObjectMapper();
String testStr = "{\"str\":\"hoge\",\"unknownstr\":\"fuga\"}";
TestJsonBean bean = om.readValue(testStr,TestJsonBean.class);


すると、案の定以下のようなExceptionが発生します。

Exception in thread "main" org.codehaus.jackson.map.exc.UnrecognizedPropertyException: Unrecognized field "str3" (Class jp.ameba.TestJsonBean), not marked as ignorable


今回は未知のプロパティを無視して、存在するプロパティだけをデシリアライズしたいので、クラスに以下のようなアノテーションを追記します。

@JsonIgnoreProperties(ignoreUnknown=true)
public class TestJsonBean {
(略)
}


この状態で先ほどと同じコードでデシリアライズを実行すると、無事存在する「str」だけがデシリアライズされる結果になります。
かんたん!

スポンサーリンク