[英]Jackson JSON Deserialization with Root Element
我對傑克遜有一個我認為應該很容易解決的問題,但它讓我很沮喪。
假設我有一個看起來像這樣的 Java POJO 類(假設我有 Getter 和 Setter):
class User {
private String name;
private Integer age;
}
我想將如下所示的 JSON 反序列化為 User 對象:
{
"user":
{
"name":"Sam Smith",
"age":1
}
}
Jackson 給我帶來了問題,因為 User 不是 JSON 中的第一級對象。 我顯然可以創建一個具有單個 User 對象的 UserWrapper 類,然后使用它進行反序列化,但我知道必須有一個更優雅的解決方案。
我該怎么做?
編輯:此解決方案僅適用於 jackson < 2.0
對於您的情況,有一個簡單的解決方案:
@JsonRootName(value = "user")
注釋模型類;om.configure(Feature.UNWRAP_ROOT_VALUE, true);
配置映射器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]
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.