【发布时间】:2019-01-27 08:20:57
【问题描述】:
假设我收到来自服务器的错误 JSON,它可以是两种不同的结构:
{"errorMessage": "This action is unauthorized."}
或
{"errorMessage":{"changePassword":"Old password is incorrect."}}
如何反序列化这种 json?
我尝试了什么
我试图让抽象类“错误”和两个孩子:
abstract class Error() {}
data class SingleError(val errorMessage: String) : Error()
data class MultiError(val errorMessage: Map<String, String>) : Error()
那我试试:
jacksonObjectMapper().readValue<Error>(response.body)
要反序列化,但我有例外:
com.fasterxml.jackson.databind.exc.InvalidDefinitionException: Cannot construct instance of `com.fifth_llc.siply.main.request.Forbidden$Error` (no Creators, like default construct, exist): abstract types either need to be mapped to concrete types, have custom deserializer, or contain additional type information
at [Source: (String)"{"errorMessage":{"changePassword":"Old password is incorrect."}}"; line: 1, column: 1]
我也尝试过 JsonDeserialize 注释,但如果我想解析为具体类型,似乎可以使用它:
@JsonDeserialize(`as` = MultiError::class)
有什么帮助吗?
【问题讨论】:
标签: java android json kotlin jackson