1

我正在使用我不拥有且无法修改的 java API。该 API 定义了一个类Aggregation,该类是Immutables具有 Jackson 序列化和反序列化的 (immutables.github.io) 抽象类。

班级看起来像

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

我想向 Aggregation 添加一个字段,该字段应在序列化时提取,但仍可以将其实例传递给接受的方法Aggregation

我想做类似的事情:

public abstract class ExtendedAggregation extends Aggregation {}

这可能吗?

4

1 回答 1

1

我没有设法在两个标记有@Value.Immutable你想要的类之间继承,所以我尝试使用 Jackson 来解决这个问题。

找到了下面的方法,它使用@JsonAppend注解和mixins来添加属性而不接触Aggregation类。

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

@JsonAppend(
    attrs = {
        @JsonAppend.Attr(value = "version")
})
public class AggregationMixin {}

ObjectMapper向您的实例注册 Mixin :

mapper.addMixIn(Aggregation.class, AggregationMixin.class);

通过创建一个 dedicated 来序列化类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

于 2017-02-24T14:02:28.167 回答