Jacksonを使っていて以下のケースに遭遇し、対応した際のメモです。
■問題のケース
JacksonでJson文字列 ⇔ Javaオブジェクトの変換をしていて、
Jsonのパラメータ名は大文字だけどオブジェクトのプロパティ名は小文字・・・
みたいな場合、デフォルトの設定では変換ができない。(異なるパラメータとみなしてしまう。)
※JacksonはJavaのライブラリで、 JSONパース用のライブラリです。
【参考URL】
・Jackson使い方メモ(外部リンク)
https://qiita.com/opengl-8080/items/b613b9b3bc5d796c840c
Jacksonの基本的な使い方がまとめられています。
MavenやGradleを使っているプロジェクトの場合のセットアップも載っています。
解決策
以下のオプションを設定してから変換する。
MapperFeature.ACCEPT_CASE_INSENSITIVE_PROPERTIES を「true」に設定
サンプル
import com.fasterxml.jackson.databind.MapperFeature; import com.fasterxml.jackson.databind.ObjectMapper; public class Sample { public static void main(String[] args) { // Json文字列 String str = "{\"ID\":1, \"NAME\":\"pjin_user\",\"AGE\":30}"; // マッパーを用意 ObjectMapper mapper = new ObjectMapper(); // 大文字・小文字の区別をなくす mapper.configure(MapperFeature.ACCEPT_CASE_INSENSITIVE_PROPERTIES, true); try { Member member = new Member(); // Json文字列 ⇒ Memberクラスにパース member = mapper.readValue(str, Member.class); System.out.println(member); } catch (Exception e) { System.out.println("エラーだよ"); } } } class Member { public int id; public String name; public int age; @Override public String toString() { return "{ id : " + this.id + ", name : " + this.name + ", age : " + this.age + " }"; } }
解説
9行目の文字列が元のJson文字列で、各パラメータ名が小文字となっている一方、
33行目からのMemberクラスがパース用のクラスで、各プロパティ名が大文字となっています。
特に設定をせずにreadValue(21行目)してしまうと、エラーとなるのですが、
15行目の設定を入れていることにより、大文字小文字の区別がなくなりエラーを回避できます。
▼以下を確認しましょう
15行目を削除 or コメントアウトして、エラーとなる事を確認しましょう。
以上、Jacksonで大文字・小文字の区別を回避した際のメモでした。
関連記事
【Java】Jacksonセットアップメモ(jar使用)