我在使用 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 吗?两者GSON和 Genson (我个人最喜欢的)做同样的事情,但是更快,更容易。看看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/