はじめに
jsonをjavaクラスに変換する方法をまとめました。
以下のエラーに悩んだので原因と解決方法も書いています。
com.fasterxml.jackson.databind.exc.InvalidDefinitionException
Json⇒javaクラス変換
mainクラス
String sjson = "{\"id\": 1, \"name\": \"Tanaka Taro\", \"gender\": \"Man\", \"age\": 23}";
ObjectMapper mapper = new ObjectMapper();
BaseballPlayer player = mapper.readValue(sjson, BaseballPlayer.class);
System.err.println(player.getName());
BaseballPlayerクラス
public class BaseballPlayer {
private int id;
private String name;
private String gender;
private int age;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getGender() {
return gender;
}
public void setGender(String gender) {
this.gender = gender;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
結果
Tanaka Taro
InvalidDefinitionExceptionが発生する場合
原因はjsonのプロパティ名が大文字始まりの場合に、発生します。
解決方法としてはおとなしく小文字のプロパティ名にするか、大文字小文字を区別しない設定をいれてください。
String sjson = "{\"id\": 1, \"name\": \"Tanaka Taro\", \"gender\": \"Man\", \"age\": 23}";
ObjectMapper mapper = new ObjectMapper();
mapper.configure(MapperFeature.ACCEPT_CASE_INSENSITIVE_PROPERTIES, true); // ←これです
BaseballPlayer player = mapper.readValue(sjson, BaseballPlayer.class);
System.err.println(player.getName());