簡體   English   中英

無法使用傑克遜反序列化和序列化Java List <>

[英]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接受一個標有@JsonCreatorList<Bla> (還有其他方法,但這是一種故障保護方法,可以使代碼易於讀取)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM