启用proguard规则后,我遇到了以下问题。在发送任何内容到网络之前,就出现了如下错误:
java.lang.RuntimeException: 无法将FormDocTankPermission转换为RequestBody
原因是:
com.fasterxml.jackson.databind.exc.InvalidDefinitionException: 未找到FormDocTankPermission类的序列化程序,并且没有发现要创建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
引起了问题
我创建Retrofit如下:
Builder()
.[...]
.addConverterFactory(JacksonConverterFactory.create())
Jackson的Proguard规则
# 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.**