2017-02-23 109 views
1

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

类看起来像

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

我想添加一个字段来聚集应在序列化时有所回升,但其中的情况下,仍然可以传递给接受Aggregation方法。

我想要做的事,如:

public abstract class ExtendedAggregation extends Aggregation {} 

这可能吗?

回答

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

+1

这对我来说很好 – marisbest2