启用缩小后 JsonProperty 不工作
JsonProperty not working while minification enabled
我有以下class
class CodeRequest(@JsonProperty("phone") val phoneNumber: String)
当我发送请求(使用改装)并将此 class 的对象作为正文(未启用缩小)时,一切正常,请求将以这种形式发送 {"phone": "123"}
但是使用以下 proguard-rules.pro
启用缩小将导致 {"phoneNumber": "123"}
请求正文。
# Jackson
-keep class com.fasterxml.jackson.databind.ObjectMapper {
public <methods>;
protected <methods>;
}
-keep class com.fasterxml.jackson.databind.ObjectWriter {
public ** writeValueAsString(**);
}
-keep @com.fasterxml.jackson.annotation.* class * { *; }
-keep @com.fasterxml.jackson.annotation.** class * { *; }
-keep class com.fasterxml.** { *; }
-keepattributes *Annotation*,EnclosingMethod,Signature,Exceptions,InnerClasses
-keep class * {
@com.fasterxml.jackson.annotation.* *;
}
-keep class * { @com.fasterxml.jackson.annotation.JsonProperty *;}
# Application classes that will be serialized/deserialized over Jackson
-keepclassmembers class my.application.data.models.** { *; }
-keepclassmembers class my.application.domain.network.rest.** { *; }
这里缺少什么?
谢谢。
发布问题几分钟后找到了解决方案。
问题不在于 proguard
也不在于 jackson
,而是 Kotlin 删除了存储在 kotlin.Metadata
中的所需数据。
将以下规则添加到 proguard 解决了这个问题:
-keep class kotlin.Metadata { *; }
我有以下class
class CodeRequest(@JsonProperty("phone") val phoneNumber: String)
当我发送请求(使用改装)并将此 class 的对象作为正文(未启用缩小)时,一切正常,请求将以这种形式发送 {"phone": "123"}
但是使用以下 proguard-rules.pro
启用缩小将导致 {"phoneNumber": "123"}
请求正文。
# Jackson
-keep class com.fasterxml.jackson.databind.ObjectMapper {
public <methods>;
protected <methods>;
}
-keep class com.fasterxml.jackson.databind.ObjectWriter {
public ** writeValueAsString(**);
}
-keep @com.fasterxml.jackson.annotation.* class * { *; }
-keep @com.fasterxml.jackson.annotation.** class * { *; }
-keep class com.fasterxml.** { *; }
-keepattributes *Annotation*,EnclosingMethod,Signature,Exceptions,InnerClasses
-keep class * {
@com.fasterxml.jackson.annotation.* *;
}
-keep class * { @com.fasterxml.jackson.annotation.JsonProperty *;}
# Application classes that will be serialized/deserialized over Jackson
-keepclassmembers class my.application.data.models.** { *; }
-keepclassmembers class my.application.domain.network.rest.** { *; }
这里缺少什么?
谢谢。
发布问题几分钟后找到了解决方案。
问题不在于 proguard
也不在于 jackson
,而是 Kotlin 删除了存储在 kotlin.Metadata
中的所需数据。
将以下规则添加到 proguard 解决了这个问题:
-keep class kotlin.Metadata { *; }