我想将json反序列化为类。但在下面提出错误:
com.fasterxml.jackson.databind.exc.InvalidDefinitionException:无法构造com.test.api.models.requests.RequestPayload
的实例(不存在像默认构造一样的创建者(:抽象类型要么需要映射到具体类型,要么需要自定义反序列化程序,要么包含其他类型信息在[来源:(PushbackInputStream(;行:3,列:9](通过引用链:com.test.api.models.requests.Request["data"](
{
"requested_at_ms":1234,
"data":{
"user_id":"test",
"password":"test"
}
}
// data class
abstract class RequestPayload
data class Request(val requested_at_ms: Long, val data: RequestPayload)
data class SignInRequest(val userId: String, val password:String): RequestPayload()
// controller
@RequestMapping(path=["/signin"], method=[RequestMethod.POST])
fun singIn(@RequestBody request: Request) {
println(request)
}
Jackson无法将JSON转换为Request
对象,因为它不知道如何构造RequestPayload
实例。您需要执行以下操作之一:
- 修改
Request
类,以便Jackson可以创建一个已知的类:data class Request(val requested_at_ms: Long, val data: SignInRequest)
- 编写一个自定义反序列化程序并手动告诉Jackson要创建什么类