我和Jackson有一个问题,我认为应该很容易解决,但是这真使我丧命。
假设我有一个看起来像这样的Java POJO类(假设对我来说是Getters和Setters):
class User { private String name; private Integer age; }
我想将看起来像这样的JSON反序列化为User对象:
{ "user": { "name":"Sam Smith", "age":1 } }
杰克逊给了我一些问题,因为用户不是JSON中的第一级对象。我显然可以制作一个具有单个User对象的UserWrapper类,然后使用该对象反序列化,但是我知道必须有一个更优雅的解决方案。
我应该怎么做?
编辑:此解决方案仅适用于杰克逊 <2.0
对于您的情况,有一个简单的解决方案:
@JsonRootName(value = "user")
om.configure(Feature.UNWRAP_ROOT_VALUE, true);
om.configure(DeserializationFeature.UNWRAP_ROOT_VALUE, true);
而已!
@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]