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使用)