【发布时间】:2021-07-27 04:23:50
【问题描述】:
json有几种类型,我举两种为例:
{
"name": "dataUpdated",
"version": 102,
"eventTime": "2021-06-24",
"payload": {
"id": 158420,
"name": 446970,
"date": "2021-06-16",
"type": "A"
}
{
"name": "dataError",
"version": 102,
"eventTime": "2021-06-25",
"payload": {
"error": 666,
"errorMsg": "forbidden"
}
只有有效载荷的结构发生变化
我有一个 MessageDto 类
class MessageDto {
@JsonProperty("name")
String name
@JsonProperty("version")
Integer version
@JsonProperty("eventTime")
String eventTime
@JsonProperty("payload")
Payload payload
}
Class Payload 是空的,我只是用它作为标记,并从中继承两个类:
DataUpdatedDto extends Payload {
@JsonProperty("id")
BigInteger id
@JsonProperty("name")
String name
@JsonProperty("date")
String date
@JsonProperty("type")
String type
}
DataErrorDto extends Payload {
@JsonProperty("error")
Integer error
@JsonProperty("errorMsg")
String errorMsg
}
如何向反序列化器解释我想在 Payload 的哪个后代中反序列化?
【问题讨论】:
-
如果你使用
ObjectMapper,它会询问你要反序列化的类 -
您正在寻找
@JsonTypeInfo。 -
@chrylis-cautiouslyoptimistic- 如果 JsonTypeName 对所有人都相同,我无法弄清楚如何声明:“有效负载”。要在其中反序列化的类名称的选择取决于属性 MessageDto.name
-
JsonTypeInfo.As.EXTERNAL_PROPERTY正是针对这种情况的。