我对杰克逊有一个问题,我认为应该很容易解决,但这会让我感到害怕。
假设我有一个java POJO类,看起来像这样(假设Getters和Setters对我来说):
class User {
private String name;
private Integer age;
}
我想将看起来像这样的JSON反序列化为User对象:
{
"user":
{
"name":"Sam Smith",
"age":1
}
}
杰克逊给了我一些问题,因为用户不是JSON中的第一级对象。我显然可以创建一个具有单个User对象的UserWrapper类,然后使用它进行反序列化,但我知道必须有一个更优雅的解决方案。
我该怎么做?
答案 0 :(得分:59)
编辑:此解决方案仅适用于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]