Java Jackson子类序列化
我使用的java API不是我自己的,也不能修改。该API定义了一个类Java Jackson子类序列化,java,serialization,jackson,immutables-library,Java,Serialization,Jackson,Immutables Library,我使用的java API不是我自己的,也不能修改。该API定义了一个类聚合,它是一个带有Jackson序列化和反序列化的不可变(Immutables.github.io)抽象类 这个班看起来像 @Value.Immutable @JsonSerialize(as = Immutable_Aggregation.class) @JsonDeserialize(as = Immutable_Aggregation.class) public abstract class Aggregation {
聚合
,它是一个带有Jackson序列化和反序列化的不可变
(Immutables.github.io)抽象类
这个班看起来像
@Value.Immutable
@JsonSerialize(as = Immutable_Aggregation.class)
@JsonDeserialize(as = Immutable_Aggregation.class)
public abstract class Aggregation {
我想向聚合添加一个字段,该字段应该在序列化时提取,但其实例仍然可以传递给接受聚合的方法
我想做一些类似的事情:
public abstract class ExtendedAggregation extends Aggregation {}
这可能吗?我还没有成功地在两个标有@Value.Immutable的类之间进行继承,所以我尝试使用Jackson来解决这个问题
找到了以下方法,该方法使用@JsonAppend
注释和mixin添加属性,而不涉及聚合
类
首先,使用注释定义类中的混合:
@JsonAppend(
attrs = {
@JsonAppend.Attr(value = "version")
})
public class AggregationMixin {}
使用ObjectMapper
实例注册Mixin:
mapper.addMixIn(Aggregation.class, AggregationMixin.class);
通过创建专用的ObjectWriter
,序列化该类,在其中指定添加属性的值:
ObjectWriter writer = om.writerFor(Aggregation.class).withAttribute("version", "42");
...
String output = writer.writeValueAsString(aggregationInstance);
@JsonAppend
注释可以配置为以多种方式获取其值。有关详细信息,请参阅其文档
进一步阅读: