杰克逊子类序列化

时间:2017-02-23 15:26:39

标签: java serialization jackson immutables-library

我使用的是我不拥有且无法修改的java API。该API定义了一个类$argv[1],它是一个带有Jackson序列化和反序列化的Aggregation(immutables.github.io)抽象类。

该课程类似于

Immutables

我想在聚合中添加一个字段,该字段应该在序列化时获取,但是其实例仍然可以传递给接受@Value.Immutable @JsonSerialize(as = Immutable_Aggregation.class) @JsonDeserialize(as = Immutable_Aggregation.class) public abstract class Aggregation { 的方法。

我想做类似的事情:

Aggregation

这可能吗?

1 个答案:

答案 0 :(得分:1)

我没有设法在你想要的@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#jsonappend http://wiki.fasterxml.com/JacksonMixInAnnotations