私はジャクソンに簡単に解決できると思う質問を持っていますが、それは私を殺しています。
Java POJOクラスは次のようになっているとしましょう(ゲッターとセッターを想定しています):
class User {
private String name;
private Integer age;
}
そして、次のようなJSONをデシリアライズしてUserオブジェクトにしたいと思います。
{
"user":
{
"name":"Sam Smith",
"age":1
}
}
ユーザーはJSONの第1レベルのオブジェクトではないため、Jacksonから問題が発生します。明らかに、単一のUserオブジェクトを持つUserWrapperクラスを作成し、それを使用してデシリアライズすることもできますが、もっとエレガントなソリューションが必要だと思います。
どうすればいいですか?
編集:このソリューションはjackson <2.0でのみ機能します
あなたの場合、簡単な解決策があります:
@JsonRootName(value = "user")
;の注釈を付ける必要があります。om.configure(Feature.UNWRAP_ROOT_VALUE, true);
(1.9の場合)およびom.configure(DeserializationFeature.UNWRAP_ROOT_VALUE, true);
(バージョン2の場合)で構成する必要があります。それでおしまい!
@JsonRootName(value = "user")
public static class User {
private String name;
private Integer age;
public String getName() {
return name;
}
public void setName(final String name) {
this.name = name;
}
public Integer getAge() {
return age;
}
public void setAge(final Integer age) {
this.age = age;
}
@Override
public String toString() {
return "User [name=" + name + ", age=" + age + "]";
}
}
ObjectMapper om = new ObjectMapper();
om.configure(Feature.UNWRAP_ROOT_VALUE, true);
System.out.println(om.readValue("{ \"user\": { \"name\":\"Sam Smith\", \"age\":1 }}", User.class));
これは印刷されます:
User [name=Sam Smith, age=1]