【问题标题】:Jackson error when enable proguard (minify)启用 proguard 时出现杰克逊错误(缩小)
【发布时间】:2019-11-09 18:37:51
【问题描述】:

我使用实现 'com.fasterxml.jackson.core:jackson-databind:2.9.8',当我启用 minify 时出现此错误

2019-06-27 20:23:11.172 28675-29539/? W/System.err: com.fasterxml.jackson.databind.exc.InvalidDefinitionException: No serializer found for class com.example.tst.a.b.b and no properties discovered to create BeanSerializer (to avoid exception, disable SerializationFeature.FAIL_ON_EMPTY_BEANS)
2019-06-27 20:23:11.172 28675-29539/? W/System.err:     at com.fasterxml.jackson.databind.SerializerProvider.reportBadDefinition(SerializerProvider.java:1191)
2019-06-27 20:23:11.173 28675-29539/? W/System.err:     at com.fasterxml.jackson.databind.DatabindContext.reportBadDefinition(DatabindContext.java:313)
2019-06-27 20:23:11.173 28675-29539/? W/System.err:     at com.fasterxml.jackson.databind.ser.impl.UnknownSerializer.failForEmpty(UnknownSerializer.java:71)
2019-06-27 20:23:11.173 28675-29539/? W/System.err:     at com.fasterxml.jackson.databind.ser.impl.UnknownSerializer.serialize(UnknownSerializer.java:33)
2019-06-27 20:23:11.173 28675-29539/? W/System.err:     at com.fasterxml.jackson.databind.ser.DefaultSerializerProvider._serialize(DefaultSerializerProvider.java:480)
2019-06-27 20:23:11.173 28675-29539/? W/System.err:     at com.fasterxml.jackson.databind.ser.DefaultSerializerProvider.serializeValue(DefaultSerializerProvider.java:319)
2019-06-27 20:23:11.173 28675-29539/? W/System.err:     at com.fasterxml.jackson.databind.ObjectMapper._configAndWriteValue(ObjectMapper.java:3905)
2019-06-27 20:23:11.173 28675-29539/? W/System.err:     at com.fasterxml.jackson.databind.ObjectMapper.writeValueAsString(ObjectMapper.java:3219)

这是我添加的 ProGuard 规则,但它不能解决我的问题

-keepattributes *Annotation*,EnclosingMethod,Signature
-keep class com.fasterxml.** { *; }
-keepclassmembers class ** extends com.fasterxml.jackson.databind.ser.std.** {
   public <init>(...);
}

-keepclassmembers class ** extends com.fasterxml.jackson.databind.deser.std.** {
   public <init>(...);
}
-keepattributes *Annotation*,EnclosingMethod,Signature
 -keepnames class com.fasterxml.jackson.** { *; }
 -dontwarn com.fasterxml.jackson.databind.**
 -keep class org.codehaus.** { *; }
 -keepclassmembers public final enum org.codehaus.jackson.annotate.JsonAutoDetect$Visibility {
     public static final org.codehaus.jackson.annotate.JsonAutoDetect$Visibility *; }
-keep public class your.class.** {
    *;
}
-dontwarn com.fasterxml.jackson.databind.

【问题讨论】:

    标签: java android json jackson


    【解决方案1】:

    您必须为模型的 prooguard 添加排除规则,或者您需要将此注释添加到模型的每个属性:

    @JsonProperty
    

    例如

    @JsonProperty("propertyName")
    val propertyName: String
    

    基本上,您必须防止 proguard 破坏您的属性名称(带有排除项),或者添加注释以使破坏无关紧要。

    【讨论】:

      猜你喜欢
      • 2018-07-29
      • 1970-01-01
      • 1970-01-01
      • 2018-09-24
      • 2021-04-12
      • 2014-07-06
      • 1970-01-01
      • 2018-08-25
      • 1970-01-01
      相关资源
      最近更新 更多