Java Jackson子类序列化

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 {

我使用的java API不是我自己的,也不能修改。该API定义了一个类
聚合
,它是一个带有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
注释可以配置为以多种方式获取其值。有关详细信息,请参阅其文档

进一步阅读: