1、fastJson解析报错:
com.alibaba.fastjson.JSONException: default constructor not found. class com.youjiakeji.yjkjreader.kotlin.model.UserInfoBean
2、手动添加构造参数
//添加constructor()构造参数,this(id="")中必须指定一个值
@SuppressLint("ParcelCreator")
@Parcelize
data class UserInfoBean(
var id:String?= null,
var username: String? = null,
var roleCodes: List<String>? = null,
var transportNodes: List<String>? = null,
): Parcelable{
constructor(): this(id="")
}
特别注意:UserInfoBean中的字段必须是var,否则在json字符串转化为对象的时候,对象的值全部是空值(如果是val的话)。
使用默认值+构造函数说明符非常简单:
data class Activity(
var updated_on: String = "",
var tags: List<String> = emptyList(),
var description: String = "",
var user_id: List<Int> = emptyList(),
var status_id: Int = -1,
var title: String = "",
var created_at: String = "",
var data: HashMap<*, *> = hashMapOf<Any, Any>(),
var id: Int = -1,
var counts: LinkedTreeMap<*, *> = LinkedTreeMap<Any, Any>()
) {
constructor() : this(title = "") // this constructor is an explicit
// "empty" constructor, as seen by Java.
}
这意味着使用此技巧,您现在可以使用标准Java序列化程序(Jackson,Gson等)序列化/反序列化此对象。
注意:在JVM上,如果主构造函数的所有参数都具有默认值,则编译器将生成其他无参数构造函数,该构造函数将使用默认值。 这使得Kotlin更容易使用像Jackson或JPA这样的库,通过无参数构造函数创建类实例。
3、Kotlin另外一种方式
class Animal{
var name:String?=null
var age:Int=0
// 空参的构造方法
constructor()
//有参数的构造方法
constructor(age:Int,name:String){
this.name=name
this.age=age
}
}
class UserInfoBean{
var id:String?= null
var username: String? = null
var roleCodes: List<String>? = null
var mobile: String? = null
var nickname: String? = null
}
注意:对象按照UserInfoBean方式写,可以不用写空构造,注意使用var 。
4、fastjson版本
implementation 'com.alibaba:fastjson:1.2.32'
提示:改为java也是是可以的。