エラー
Jackson で、mapper#readValue()
した
実装記述
ObjectMapper mapper = new ObjectMapper(); Show show = mapper.readValue(json, Show.class);
エラー内容
(through reference chain: xyz.monotalk.social.mixcloud.data.Show["tags"]->java.util.ArrayList[0]->xyz.monotalk.social.mixcloud.data.Tag["type"]) at com.fasterxml.jackson.databind.exc.UnrecognizedPropertyException.from(UnrecognizedPropertyException.java:51) at com.fasterxml.jackson.databind.DeserializationContext.reportUnknownProperty(DeserializationContext.java:817) at com.fasterxml.jackson.databind.deser.std.StdDeserializer.handleUnknownProperty(StdDeserializer.java:980) at com.fasterxml.jackson.databind.deser.BeanDeserializerBase.handleUnknownProperty(BeanDeserializerBase.java:1324) at com.fasterxml.jackson.databind.deser.BeanDeserializerBase.handleUnknownVanilla(BeanDeserializerBase.java:1302) at com.fasterxml.jackson.databind.deser.BeanDeserializer.vanillaDeserialize(BeanDeserializer.java:249) at com.fasterxml.jackson.databind.deser.BeanDeserializer.deserialize(BeanDeserializer.java:136)
原因と、 解決方法
JSON 連想配列に
フィールドを 追加して、 エラーを 解決する
修正前の
データクラスの 記述 /** * Show * * @author Kem */ @Getter @Setter @AllArgsConstructor @Builder @ToString public class Show extends Response { public Show() { super(); } private String description; }
修正後の
データクラスの 記述
private String type;
を追加する ことで、 エラーは 解消されます。 /** * Show * * @author Kem */ @Getter @Setter @AllArgsConstructor @Builder @ToString public class Show extends Response { public Show() { super(); } private String description; private String type; }
フィールドを 無視して エラーに ならないようにする
jacksonを
に
@JsonIgnoreProperties(ignoreUnknown=true)
JsonAnyGetter で 想定できない フィールドを Map に 設定する
以下 が
JacksonHowToIgnoreUnknown · FasterXML/jackson-docs Wiki
jacksonで
JsonAnyGetter
、JsonAnySetter
アノテーションを
どの方法で 解決するか
外部公開サービスの@JsonIgnoreProperties
をJsonAnyGetter
、JsonAnySetter
で
突如追加される@JsonIgnoreProperties
で
以上です。
コメント