多态序列化-避坑
1. 多态序列化解决方式:
- Jackson序列化默认会带上 @class 属性,反序列化时根据 @class 属性映射到对应的子类
- Fastjson通过 SerializerFeature(如SerializerFeature.WriteClassName),序列化时会带上 @Type 属性,反序列化时根据 @Type 属性映射到对应子类
2. 这里有什么坑呢?
2.1. 坑在哪里:
使用上面两种方式序列化时,@class 和 @Type 属性值为 类的全路径,so会有什么问题呢?答案是:如果序列化数据存在数据库,你的这些类的项目结构不可变了。
2.2. 问题解法:
通过Jackson注解的别名方式(即可以 指定或自定义 对应子类的标记),解藕序列化和项目结构。
2.3. Jackson 避坑用法简述
-
@JsonTypeInfo
作用于类/接口,被用来开启多态类型处理,对基类/接口和子类/实现类都有效
-
@JsonTypeInfo(use

本文探讨了Java多态序列化时遇到的问题,包括Jackson和Fastjson的处理方式。文章指出,序列化数据中携带的"class"或"Type"属性可能导致项目结构不可变的坑。为了解决这个问题,文章推荐使用Jackson的@JsonTypeInfo和@JsonSubTypes注解,通过定义别名来解耦序列化和项目结构。此外,还详细解释了@JsonTypeInfo的use、include、property等属性的作用。
最低0.47元/天 解锁文章
2032

被折叠的 条评论
为什么被折叠?



