java - Jackson 在尝试映射没有类元素的 JSON 时崩溃

标签 java android json jackson mapping

我在使用 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 对象扩展了 ActiveAndroidModel 类。删除那个“扩展”就可以正常工作了。我认为 Model 类在具有 NULL 或 EMPTY 时无法正常工作。

最佳答案

对于 Jackson,您可以尝试直接更改映射器的配置:

mapper.setSerializationInclusion(Include.NON_NULL);

但是我可以建议你看看另一个库来将 JSON 映射到 POJO 吗?两者GSONGenson (我个人最喜欢的)做同样的事情,但是更快,更容易。看看benchmarks在这里,他们比较了 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);
}

关于java - Jackson 在尝试映射没有类元素的 JSON 时崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32733326/

相关文章:

java - 使用 arraylist 匹配 Hashmap 中的键

java - 等待并通知问题

java - 如何在 streamex 中对映射流的 double 值求和?

Android AOSP linux 服务标准输出

android - 应用程序内存大小意外增长

java - Jackson ObjectMapper 意外字符 - JSON 有效

java - JNI 缓存的 jclass 全局引用变量被垃圾收集?

android - 当 Android 应用收到 ANR 或崩溃报告时自动通知

json - 如何在JQ中展平多维数组

json - 玩转Scala 2.3,JSON Array转Sequence