[英]Unable to deserialize java.awt.color using jackson deserializer
[英]Unable to deserializer and serialize Java List<> with jackson
我正在嘗試反序列化,然后序列化一個Java對象。 我有一個像這樣的物體
public class Blas{
private Integer blasRootId;
private List<Bla> blaList = new ArrayList<>();
public Blas() {}
/region g & s
getter and setters ..
//endregion
}
和對象-
public class Bla{
private String fileName;
private String description;
private Integer id;
public Bla() {}
//region g & s
getter and setters ..
//endregion
}
我反序列化對象
ObjectMapper mapper = new ObjectMapper();
mapper.configure(SerializationFeature.FAIL_ON_EMPTY_BEANS, false);
String jsonString = mapper.writeValueAsString(Blas);
和創建的json就像
{
"Blas": {
"blasRootId": 2840,
"blaList": [
"java.util.ArrayList",
[
{
"fileName": "RegularPayload",
"description": "",
"id": 2260
}
]
]
}
}
因此,當我嘗試序列化創建的json時,出現以下錯誤-
Can not instantiate value of type [simple type, class Bla] from String value ('java.util.ArrayList'); no single-String constructor/factory method
誰可以使反序列化器按原樣寫入列表,而無需添加“ java.util.ArrayList”列表,或者如何正確讀取?
更新:這是我的錯誤,我在“ mapper.configure”中添加了一個參數(我不記得是哪個參數),該參數導致序列化程序添加了“ java.util.ArrayList”。 我的代碼示例應該可以正常工作。
正如prsmax所問,這取決於您嘗試對blas進行反序列化的代碼的樣子,似乎您正在嘗試采用blas字符串並進行反序列化,如下所示:
mapper.readValue(blasStr, Bla.class)
如果只想反序列化Bla列表,則可以執行以下操作:
JavaType javaType = mapper.getTypeFactory().constructCollectionType(ArrayList.class, ValueType.class);
List<ValueType> list = mapper.readValue(str, javaType);
如果您確實需要包裝對象Blas,則應該有一個標有@JsonCreator
的構造函數, @JsonCreator
接受一個標有@JsonCreator
的List<Bla>
(還有其他方法,但這是一種故障保護方法,可以使代碼易於讀取)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.