杰克逊子类序列化



我正在使用我不拥有且无法修改的Java API。该API定义了Aggregation类,即Immutables(Immutables.github.io)带有Jackson Serialization和queserialization的抽象类。

班级看起来像

@Value.Immutable
@JsonSerialize(as = Immutable_Aggregation.class)
@JsonDeserialize(as = Immutable_Aggregation.class)
public abstract class Aggregation {

我想将一个字段添加到聚合中,该字段应在序列化时拾取,但是其实例仍然可以传递给接受Aggregation的方法。

我想做类似:

的事情
public abstract class ExtendedAggregation extends Aggregation {}

这是可能的吗?

我尚未设法在两个标记的@Value.Immutable上继承,因此我尝试使用Jackson来解决问题。

找到了以下方法,该方法使用@JsonAppend注释和Mixins添加属性而无需触摸Aggregation类。

首先,用注释定义一个混合类:

@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注释配置为以多种方式获得其值。咨询其文档以获取详细信息。

一些进一步的阅读:

http://www.baeldung.com/jackson-advanced-annotations#jsonappendhttp://wiki.fasterxml.com/jacksonmixinannotations

最新更新