杰森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]