JSONをオブジェクトにする時、未知のプロパティを無視する方法

こんにちは、さるまりんです。

Jacksonを使ってJSON文字列をObjectに変換してみます。

JSON文字列

{
	"str1": "string one",
	"int1": 20
}

SimpleObject.java

public class SimpleObject {

	@JsonProperty
	private String str1;

	@JsonProperty
	private int int1;
}

変換するコード

SimpleObject obj = new ObjectMapper().readValue(json, SimpleObject.class);

これで変数jsonSimpleObjectクラスのobjに変換されます。

コードはこのままで、JSON文字列に一つプロパティ(day1)を増やしてみます。

{
	"str1": "string one",
	"int1": 20,
	"day1": "2020-10-11"
}

プログラムを実行するとこんなエラーが。。。

Exception in thread "main" com.fasterxml.jackson.databind.exc.UnrecognizedPropertyException: Unrecognized field "day1" (class SimpleObject), not marked as ignorable (2 known properties: "str1", "int1"])
 at [Source: (String)"{	"str1": "string one",	"int1": 20,	"day1": "2020-10-11"}"; line: 1, column: 46] (through reference chain: SimpleObject["day1"])

UnrecognizedPropertyException わからないプロパティがありますよの例外です。

エラーメッセージにもある通りday1のことは知らないですよ、知っているのはstr1int1です。

この状態でエラーが出ないようにするにはSimpleObjectクラスにアノテーション@JsonIgnoreProperties(ignoreUnknown=true)をつけます。

(ignoreUnknown=true)で未知のプロパティを無視するです。

@JsonIgnoreProperties(ignoreUnknown=true)
public class SimpleObject {

これでエラーは出なくなります。

別のシステムから送られてくるJSONにいきなり(知らされずに)プロパティが増えているのはよくあることです。

ですので、これをつけていると突然エラーで止まるということに悩まされなくて済みます。

読んでくださってありがとうございました。

それではまた!