J'ai une question avec Jackson qui, à mon avis, devrait être simple à résoudre, mais elle me tue.
Disons que j'ai un Java classe POJO qui ressemble à ceci (supposons que les Getters et Setters pour moi):
class User {
private String name;
private Integer age;
}
Et je veux désérialiser JSON qui ressemble à ceci dans un objet utilisateur:
{
"user":
{
"name":"Sam Smith",
"age":1
}
}
Jackson me donne des problèmes parce que l'utilisateur n'est pas l'objet de premier niveau dans le JSON. Je pourrais évidemment créer une classe UserWrapper qui a un seul objet User, puis désérialiser en utilisant cela, mais je sais qu'il doit y avoir une solution plus élégante.
Comment dois-je procéder?
modifier: cette solution ne fonctionne que pour jackson <2.
Pour votre cas, il existe une solution simple:
@JsonRootName(value = "user")
;om.configure(Feature.UNWRAP_ROOT_VALUE, true);
(comme pour 1.9) et om.configure(DeserializationFeature.UNWRAP_ROOT_VALUE, true);
(pour la version 2).C'est ça!
@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));
cela imprimera:
User [name=Sam Smith, age=1]