この記事で 伝えたいこと
FasterXML/jackson: Main Portal page for the Jackson project のcom.fasterxml.jackson.databind
に
import com.fasterxml.jackson.databind.ObjectMapper
これにorg.codehaus.jackson.map
で、
import org.codehaus.jackson.map.ObjectMapper;
version 1 時代に
ちなみに
問題と なった 実装と、 発生した エラー
問題と なった 実装
Jackson
でJson
をJavaObject
にConvert
しようしていました。
// Do Something... // ----------------------------------- // ConvertValue // ------------ ObjectMapper mapper = new ObjectMapper(); mapper.setPropertyNamingStrategy(PropertyNamingStrategy.CAMEL_CASE_TO_LOWER_CASE_WITH_UNDERSCORES); CollectionLikeType jt = mapper.getTypeFactory().constructCollectionType(List.class, clazz); return mapper.convertValue(results, jt);
発生した エラー
実際実行すると
org.codehaus.jackson.map.exc.UnrecognizedPropertyException: Unrecognized field "xxx" (Class xxx.dto.License), not marked as ignorable
一般的に 上記の エラーが 発生する パターン
Web
検索では、
* jacksonで
Convert
対象のJava
クラスに、@JsonIgnoreProperties
アノテーションを
無視してよい@JsonIgnoreProperties
アノテーションを
@JsonIgnoreProperties(ignoreUnknown = true)
今回エラーが 発生した ケース
@JsonIgnoreProperties
付けていないのが 問題ではなかった
そもそもJava
クラスの@JsonProperty
アノテーションのUnknown Field
ではないだろこの
@JsonProperty("xxx") private Integer xxxRank;
@JsonIgnoreProperties
を原因が
Web
検索していた「 org.codehaus.jackson
はversion1
だよ。com.fasterxml.jackson
がversion2
で
との
pom.xml の 依存定義と、 ソースコードを 確認
pom.xml の
定義
もしかしてと pom
を見たらしっかり、 version1
、version2
の両方が 定義されていました。 <!-- JSON API --> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-core</artifactId> <version>2.7.4</version> </dependency> <dependency> <groupId>org.codehaus.jackson</groupId> <artifactId>jackson-mapper-asl</artifactId> <version>1.9.13</version> </dependency>
ObjectMapper の
import 定義
ObjectMapper
のimport
記述は、version1
を使用する 形に なっていました。 import org.codehaus.jackson.map.ObjectMapper;
@JsonProperty
のimport 定義
@JsonProperty
のimport
記述は、version2
を使用する 形に なっていました。 import com.fasterxml.jackson.annotation.JsonProperty;
原因
version1
のObjectMapper
がversion2
のField
が
version1
はpom
上削除してimport
文変更で
古いライブラリの、
IDE の
以上です。
コメント