在启用proguard规则后,我面对以下因此,错误在将任何内容发送到网络之前出现。
java.lang.runtimeException:无法转换 formdoctankpermission请求
由
引起com.fasterxml.jackson.databind.exc.invaliddefinitionException:否 为class formdoctankpersmission找到的序列化器,没有属性 发现创建beanSerializer(为避免例外,禁用 serializationfeature.fail_on_empty_beans(
我作为@Retrofit.Body
发送的课程看起来如下:
class FormDocTankPermission (
@get:JsonProperty("fuelCardId")
val fuelCardId: Long,
@get:JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd")
@get:JsonProperty("validityDate")
val validityDate: Date
)
我假设@get:JsonProperty
会导致问题
i Cretea Raturofit像这样
Builder()
.[...]
.addConverterFactory(JacksonConverterFactory.create())
杰克逊的前卫规则
# Jackson
-keep class com.fasterxml.jackson.databind.ObjectMapper {
public <methods>;
protected <methods>;
}
-keep class com.fasterxml.jackson.databind.ObjectWriter {
public ** writeValueAsString(**);
}
-keepnames class com.fasterxml.jackson.** { *; }
-dontwarn com.fasterxml.jackson.databind.**
proguard可能会删除自定义序列化器/deserializers的默认构造函数。在这种情况下,该规则对我有所帮助:
-keepclassmembers class ** extends com.fasterxml.jackson.databind.ser.std.** {
public <init>(...);
}
-keepclassmembers class ** extends com.fasterxml.jackson.databind.deser.std.** {
public <init>(...);
}
如果它在没有proguard的情况下正常工作,则应尝试以下专业规则:
**-keepattributes** Signature,*Annotation*,EnclosingMethod
(Because jackson uses annotation)
**-keep** class com.fasterxml.jackson.** { *; } (Keep everything under the jackson package)
**-dontwarn** com.fasterxml.jackson.databind.** (Do not throw warning from here)
**-dontwarn** com.fasterxml.jackson.** (Do not throw any kind of warning from here)
**-keep** class org.json.JSONObject.** {** put(java.lang.String,java.util.Map);}
如果您有一个自定义 jsonserializer&lt;> ,则必须保留它。
我希望,对您有帮助。