杰森JSON反序列化与根元素

我和jackson有一个问题,我觉得应该很简单,但是这样会让我失望。

比方说,我有一个Java POJO类,看起来像这样(假设我为Getters和Setters):

class User { private String name; private Integer age; } 

我想反序列化看起来像这样的JSON到一个用户对象:

 { "user": { "name":"Sam Smith", "age":1 } } 

jackson给我的问题,因为用户不是在JSON的第一级对象。 我显然可以做一个UserWrapper类有一个单一的用户对象,然后反序列化,但我知道必须有一个更优雅的解决scheme。

我应该怎么做?

编辑:这个解决scheme只适用于jackson<2.0

对于你的情况有一个简单的解决scheme:

  • 您需要使用@JsonRootName(value = "user")注释您的模型类;
  • 您需要使用om.configure(Feature.UNWRAP_ROOT_VALUE, true);configuration您的映射器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]