簡體   English   中英

嘗試在沒有類元素的情況下映射JSON時Jackson崩潰

[英]Jackson crash when try to map a JSON without an element of the class

我在使用Jackson映射對象時遇到問題。

當我映射有時缺少該類中的項目的JSON對象時,就會發生此問題。

我試圖找出如何設置配置,以便在JSON沒有類的所有字段時不會崩潰。

我已經嘗試過:

MAPPER.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);

@JsonIgnoreProperties(ignoreUnknown = true)

這是錯誤:

com.fasterxml.jackson.databind.JsonMappingException: Instantiation of [simple type, class com.non.real.package.Like] value failed: null (through reference chain: com.non.real.package.CardFeed["likes"]->com.non.real.package.CardLikes["likes"]->java.util.ArrayList[0])


"likes": {
         "count": 0,
         "likes": []
       }

嘗試不同的解決方案,我發現Like對象正在擴展ActiveAndroid Model類。 刪除該“擴展名”,效果很好。 我認為Model類具有NULL或EMPTY時不能正常工作。

對於Jackson,您可以嘗試直接更改映射器的配置:

mapper.setSerializationInclusion(Include.NON_NULL);

但是我是否建議您查看另一個將JSON映射到POJO的庫? GSONGenson (我個人最喜歡的)都執行相同的操作,但是速度更快且更容易。 看看這里的基准 ,他們比較Jackson,GSON和Genson的(反)序列化。

使用Genson,跳過空值非常容易:

private static final Genson gensonSkipNulls = new Genson.Builder().setSkipNull(true).create();

 /**
 * Deserializes JSON into a Java object.
 *
 * @param json       The JSON to deserialize.
 * @param superclass The model to deserialize the JSON into.
 * @return An object that is an instanceof superclass.
 */
public Object deserialize(final String json, final Class superclass) {
    return genson.deserialize(json, superclass);
}

暫無
暫無

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

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