启用 proguard 时出现杰克逊错误(缩小)
Posted
技术标签:
【中文标题】启用 proguard 时出现杰克逊错误(缩小)【英文标题】:Jackson error when enable proguard (minify) 【发布时间】: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.
【问题讨论】:
【参考方案1】:您必须为模型的 prooguard 添加排除规则,或者您需要将此注释添加到模型的每个属性:
@JsonProperty
例如
@JsonProperty("propertyName")
val propertyName: String
基本上,您必须防止 proguard 破坏您的属性名称(带有排除项),或者添加注释以使破坏无关紧要。
【讨论】:
以上是关于启用 proguard 时出现杰克逊错误(缩小)的主要内容,如果未能解决你的问题,请参考以下文章
更新文档时出现 XMLHttpRequest 错误,但应启用 CORS
在 JaxWSClient 上启用 LoggingInInterceptor 时出现“流已关闭”错误
创建 Azure 存储 Blob 容器时出现错误 403(已启用存储防火墙
在 VSCode 中启用 Dart DevTools 时出现错误 - Dart DevTools exited with code 65