反序列化子类型丢失

使用 fastjson 进行序列化

java 复制代码
public class RealTimeMetricData extends RealTimeMetricDataIndex {

    private int version;

    @Nullable
    private Object data;
}
java 复制代码
public class RealTimeMetricDataIndex {
    
    private RealTimeBaseMetric metric;

    private String pk;

    private String binName;
}

objectMapper 配置

java 复制代码
objectMapper.addMixIn(RealTimeBaseMetric.class, RealTimeBaseMetricMixin.class);
//        this.objectMapper = new ObjectMapper().setSerializationInclusion(JsonInclude.Include.NON_NULL)
//                .disable(SerializationFeature.FAIL_ON_EMPTY_BEANS)
//                .disable(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES)
//                .activateDefaultTyping(LaissezFaireSubTypeValidator.instance, ObjectMapper.DefaultTyping.JAVA_LANG_OBJECT);
        this.objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);

序列化

java 复制代码
objectMapper.writeValueAsString(RealTimeMetricData);

反序列化

java 复制代码
objectMapper.readValue(key, new TypeReference<List<RealTimeMetricData>>() {});

问题:此时反序列化得到的 RealTimeBaseMetric类型丢失

解决:

方法一:使用注解(需修改RealTimeBaseMetric类)

RealTimeBaseMetric类上添加Jackson注解:

java 复制代码
@JsonTypeInfo(use = JsonTypeInfo.Id.CLASS, include = JsonTypeInfo.As.PROPERTY, property = "@class")
public abstract class RealTimeBaseMetric {
    // 原有代码
}

方法二:使用Mix-in(无需修改源代码)

创建Mix-in类:

java 复制代码
@JsonTypeInfo(use = JsonTypeInfo.Id.CLASS, include = JsonTypeInfo.As.PROPERTY, property = "@class")
public abstract class RealTimeBaseMetricMixin {}

配置ObjectMapper:

java 复制代码
ObjectMapper objectMapper = new ObjectMapper();
objectMapper.addMixIn(RealTimeBaseMetric.class, RealTimeBaseMetricMixin.class);
相关推荐
练习时长一年10 分钟前
搭建langchain4j+SpringBoot的Ai项目
java·spring boot·后端
zhangfeng113312 分钟前
在 R 语言里,`$` 只有一个作用 按名字提取“列表型”对象里的单个元素 对象 $ 名字
开发语言·windows·r语言
文弱书生65629 分钟前
5.后台运行设置和包设计与实现
服务器·开发语言·c#
九术沫31 分钟前
装饰器模式在Spring中的案例
java·spring·装饰器模式
编码浪子33 分钟前
趣味学RUST基础篇(异步补充)
开发语言·后端·rust
songroom39 分钟前
Rust : 关于Deref
开发语言·后端·rust
qq_4017004142 分钟前
QT子线程与GUI线程安全交互
开发语言·qt
高-老师1 小时前
R语言生物群落(生态)数据统计分析与绘图实践技术应用
开发语言·r语言·生物群落
Joy-鬼魅1 小时前
怎么生成qt的pro文件
开发语言·qt
Rysxt_1 小时前
Spring Boot 集成 Spring AI OpenAI Starter 教程
java·spring boot·后端·ai