android - 如何使用 Android Lollipop 中的注释在 Android Jackson 解析期间修复 IncompatibleClassChangeError?

标签 android json parsing jackson android-5.0-lollipop

在我们的 android 应用中,我们在模型中使用 Jackson Annotations:

@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.PROPERTY, property = "templateType", visible = true, defaultImpl = Default.class)
@JsonSubTypes({
@Type(value = Subclass1.class, name = "tType1")

我们使用对象映射器解析 json 响应,其中 klass 是我们希望解析到的对象文件的类: getObjectMapper().readValue(json, klass);

在 Android Lollipop 设备上的罕见场景中,我们得到

java.lang.IncompatibleClassChangeError: 找不到 com.fasterxml.jackson.annotation.JsonSubTypes$Type.value。

完整的堆栈跟踪:

com.fasterxml.jackson.annotation.JsonSubTypes$Type.value
at libcore.reflect.AnnotationAccess.toAnnotationInstance(AnnotationAccess.java:659)
at java.lang.Class.getDeclaredAnnotations(Class.java:891)
at com.fasterxml.jackson.databind.introspect.AnnotatedClass.resolveClassAnnotations(AnnotatedClass.java:300)
at com.fasterxml.jackson.databind.introspect.JacksonAnnotationIntrospector.isIgnorableType(JacksonAnnotationIntrospector.java:103)
at com.fasterxml.jackson.databind.deser.BeanDeserializerFactory.isIgnorableType(BeanDeserializerFactory.java:844)
at com.fasterxml.jackson.databind.deser.DeserializerCache._createDeserializer2(DeserializerCache.java:401)
at com.fasterxml.jackson.databind.DeserializationContext.findContextualValueDeserializer(DeserializationContext.java:305)
at com.fasterxml.jackson.databind.deser.std.CollectionDeserializer.createContextual(CollectionDeserializer.java:151)
at com.fasterxml.jackson.databind.deser.std.StdDeserializer.findDeserializer(StdDeserializer.java:634)
at com.fasterxml.jackson.databind.deser.BeanDeserializerBase.resolve(BeanDeserializerBase.java:438)
at com.fasterxml.jackson.databind.jsontype.impl.TypeDeserializerBase._findDeserializer(TypeDeserializerBase.java:173)
at com.fasterxml.jackson.databind.jsontype.impl.AsPropertyTypeDeserializer._deserializeTypedForId(AsPropertyTypeDeserializer.java:99)
at com.fasterxml.jackson.databind.deser.AbstractDeserializer.deserializeWithType(AbstractDeserializer.java:106)
at com.fasterxml.jackson.databind.deser.SettableBeanProperty.deserialize(SettableBeanProperty.java:464)
at com.fasterxml.jackson.databind.deser.impl.MethodProperty.deserializeAndSet(MethodProperty.java:98)
at com.fasterxml.jackson.databind.deser.BeanDeserializer.deserializeFromObject(BeanDeserializer.java:295)
at com.fasterxml.jackson.databind.ObjectMapper._readMapAndClose(ObjectMapper.java:2888)

最佳答案

这是某些三星设备上已确认的错误。不幸的是,目前还没有修复,但这个 Android Bug Tracker 线程可能很快就会提出修复(如果可能的话):

https://code.google.com/p/android/issues/detail?id=172339

关于android - 如何使用 Android Lollipop 中的注释在 Android Jackson 解析期间修复 IncompatibleClassChangeError?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29619052/

相关文章:

android - 旋转或缩放后的 View 中心

android - 如何自定义 IconButton 的颜色

java - JSON 查找值并返回带有键的对象

ruby-on-rails - 事件管理员 : how to add sortable on nested model's json column

javascript - JQuery/Javascript 循环遍历 JQuery Mobile slider 并根据其值创建 JSON 字符串

php - 解析sql查询PHP

android - 是否有创建操作按钮 fragment 的简单方法?

javascript - HTML5 地理定位在 https 网站上失败

Android parseDouble 在应该抛出 NumberFormatException 时返回 Infinity

python - 是否有用 PLY 编写的 Python(或子集)语法或词法分析器和解析器?