[英]How to write flattening List deserializer with Jackson?
我正在嘗試使用Jackson將特定結構的JSON反序列化為Java類。 我有幾個像這樣的課程:
class A {
private int number1;
private List<X> list1;
private int number2;
}
class X {
private String field1;
private double value1;
}
class B {
private String name2;
private List<Y> list2;
}
class Y {
private String field2;
}
我從外部系統獲取JSON,如下所示:
{
"number1": 1,
"list1": {
"elements": [{
"field1": "Field 1 value 1",
"value1": 2.2
}, {
"field1": "Field 1 value 2"
}]
},
"number2": 2,
}
{
"name2": "Name 2",
"list2": {
"elements": [{
"field2": "Field 2 value 1"
}]
}
}
我只想編寫一個自定義反序列化器,可以以一種通用的方式擺脫這個元素級別(我的意思是為所有類都擁有一個反序列化器)。 有沒有簡單的方法來擴展StdDeserializer來完成該任務,或者我必須使用自定義算法編寫一個全新的反序列化器?
您可以看一下這個問題: Jackson-將內部對象列表反序列化為非常相似的更高級別的列表 。 我已經實現了自定義反序列化器,該反序列化器可用於帶有內部列表的許多不同類型。 您的示例POJO
可能如下所示:
class A {
private int number1;
@JsonDeserialize(using = InnerListDeserializer.class)
private List<X> list1;
private int number2;
// getters, setters
}
編輯
如果您不想使用任何注釋或自定義反序列化,則需要創建適合給定JSON
POJO
結構。 您需要創建中間POJO
:
class ListWrapper<T> {
private List<T> elements;
// getter, setter, toString, etc
}
現在,您需要以這種方式更新類A
和B
:
class A {
private int number1;
private ListWrapper<X> list1;
private int number2;
// getters, setters, toString
}
和
class B {
private String name2;
private ListWrapper<Y> list2;
// getters, setters, toString
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.