こんにちは、さるまりんです。
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);
これで変数json
がSimpleObject
クラスの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
のことは知らないですよ、知っているのはstr1
とint1
です。
この状態でエラーが出ないようにするにはSimpleObject
クラスにアノテーション@JsonIgnoreProperties(ignoreUnknown=true)
をつけます。
(ignoreUnknown=true)
で未知のプロパティを無視するです。
@JsonIgnoreProperties(ignoreUnknown=true)
public class SimpleObject {
これでエラーは出なくなります。
別のシステムから送られてくるJSONにいきなり(知らされずに)プロパティが増えているのはよくあることです。
ですので、これをつけていると突然エラーで止まるということに悩まされなくて済みます。
読んでくださってありがとうございました。
それではまた!