簡體   English   中英

傑克遜JSON強制反序列化為對象

[英]Jackson JSON force deserialize to object

我得到了一個代表團的課程設置

public class MyClass implements List<Integer> {

    public String name;

    public List<Integer> target; // this is the delegation target
    // more fields

    @Override
    public Integer get(int index) {
        return target.get(index);
    }
    // all other method in target interface is delegated 
}

我得到了一個看起來像這樣的JSON:

{"target": [1, 2, 3] , "name":"foo"}

傑克遜拋出這個:

Exception in thread "main" com.fasterxml.jackson.databind.JsonMappingException: Can not deserialize instance of com.foo.MyClass out of START_OBJECT token
 at [Source: java.io.StringReader@156e5f3e; line: 1, column: 1]
    at com.fasterxml.jackson.databind.JsonMappingException.from(JsonMappingException.java:164)
    at com.fasterxml.jackson.databind.DeserializationContext.mappingException(DeserializationContext.java:691)
    at com.fasterxml.jackson.databind.DeserializationContext.mappingException(DeserializationContext.java:685)
    at com.fasterxml.jackson.databind.deser.std.CollectionDeserializer.handleNonArray(CollectionDeserializer.java:256)
    at com.fasterxml.jackson.databind.deser.std.CollectionDeserializer.deserialize(CollectionDeserializer.java:214)
    at com.fasterxml.jackson.databind.deser.std.CollectionDeserializer.deserialize(CollectionDeserializer.java:204)
    at com.fasterxml.jackson.databind.deser.std.CollectionDeserializer.deserialize(CollectionDeserializer.java:23)
    at com.fasterxml.jackson.databind.ObjectMapper._readMapAndClose(ObjectMapper.java:2986)
    at com.fasterxml.jackson.databind.ObjectMapper.readValue(ObjectMapper.java:2091)

我猜測傑克遜認為MyClass是一個列表所以不知道如何處理{}因為[]是預期的

我通過讓MyClass不實現List<Integer>證實了我的推測:

public class MyClass { /*same stuff*/}

一切順利。 但我需要MyClass來實現List<Integer> ....

我可以使用模塊中的注釋或配置來解決這個問題嗎?

我在閱讀這篇文章時偶然發現了我的答案。基本上,我需要用我的課程注釋

@JsonFormat(shape = Shape.OBJECT)

您可以編寫一個自定義反序列化器,但我真的認為如果刪除List繼承,問題會更好解決。

實現該接口的要求是什么? 對於您的頂級類來說,擁有列表的訪問者而不是實現接口會不會更有意義? 從OO的角度來看,您的頂級課程不是“一種”列表。 刪除繼承,你有一個與Jackson合作的更干凈的設計。

暫無
暫無

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

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