Kotlin data类 & fastJson 坑

一、遇到坑之前的库版本

kotlin版本: ext.kotlin_version = "1.3.72"
fastJson 版本 :api 'com.alibaba:fastjson:1.2.73'
实体类:

data class HomeBannerBean(
        val advertisements: List? = mutableListOf(),
        val maxCarouselNum: Int = -1,
        val positionCode: String = "",
        val type: Int = -1
)

注意:默认的构造函数,只需要给所有的参数一个 默认值 即可!!

二、错误上报

kotlin Caused by: com.alibaba.fastjson.JSONException: default constructor not found. class 异常

1,解决方案,添加 kotlin-reflect 库

    //解决:kt 使用data class 的时候,json转换异常
    api "org.jetbrains.kotlin:kotlin-reflect:$kotlin_version"

2,给 data 类的参数,添加默认实现。如上 HomeBannerBean 对其参数,都添加默认实现。

3,混淆添加:

# 按照Gradle Plugin升级说明添的规则
-keep class kotlin.Metadata { *; }
-keepattributes RuntimeVisibleAnnotations

# 因为fastjason需要通过kotlin-reflect完成工作,还需要添加一下规则
-dontwarn kotlin.reflect.jvm.internal.**
-keep class kotlin.reflect.jvm.internal.** { *; }
-keep class com.cheekiat.fastjson.model.** {*;}


-keepattributes Signature
-dontwarn com.alibaba.fastjson.**
-keep class com.alibaba.fastjson.*{*;}

ps:个人没把 fastJson,换成Android版本,换之后,项目各种报错。

参考:

  • https://github.com/alibaba/fastjson/issues/1569
  • https://github.com/manondidi/kotlinArch/issues/3
  • https://github.com/alibaba/fastjson/issues/2929

你可能感兴趣的:(Kotlin data类 & fastJson 坑)