使用根元素的Jackson JSON反序列化 [英] Jackson JSON Deserialization with Root Element
问题描述
我向杰克逊提出一个问题,我觉得应该很容易解决,但这会让我感到害怕。
I am having a question with Jackson that I think should be simple to solve, but it is killing me.
假设我有一个java POJO类,看起来很简单像这样(假设Getters和Setters为我):
Let's say I have a java POJO class that looks like this (assume Getters and Setters for me):
class User {
private String name;
private Integer age;
}
我想将看起来像这样的JSON反序列化为User对象:
And I want to deserialize JSON that looks like this into a User object:
{
"user":
{
"name":"Sam Smith",
"age":1
}
}
杰克逊是给我带来问题,因为用户不是JSON中的第一级对象。我显然可以创建一个具有单个User对象的UserWrapper类,然后使用它进行反序列化,但我知道必须有一个更优雅的解决方案。
Jackson is giving me issues because the User is not the first-level object in the JSON. I could obviously make a UserWrapper class that has a single User object and then deserialize using that but I know there must be a more elegant solution.
我该怎么做?
推荐答案
编辑:此解决方案仅适用于jackson< 2.0
对于您的情况,有一个简单的解决方案:
For your case there is a simple solution:
- 您需要使用
注释您的模型类@JsonRootName(value =user)
; - 您需要配置您的映射器
om.configure(Feature.UNWRAP_ROOT_VALUE,true);
(与1.9相同)和om.configure(DeserializationFeature.UNWRAP_ROOT_VALUE,true);
(对于版本2)。
- You need to annotate your model class with
@JsonRootName(value = "user")
; - You need to configure your mapper with
om.configure(Feature.UNWRAP_ROOT_VALUE, true);
(as for 1.9) andom.configure(DeserializationFeature.UNWRAP_ROOT_VALUE, true);
(for version 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]
这篇关于使用根元素的Jackson JSON反序列化的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!