我使用的是我不拥有且无法修改的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
这可能吗?
答案 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