2017-02-23 61 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