杰克逊子类序列化
问题描述:
我正在使用我不拥有且无法修改的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 {}
这可能吗?
答
我还没有设法在两个类之间继承标有@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
这对我来说很好 – marisbest2