gpt4 book ai didi

java - Jackson 子类序列化

转载 作者:行者123 更新时间:2023-11-30 06:52:47 25 4
gpt4 key购买 nike

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

该类看起来像

@Value.Immutable
@JsonSerialize(as = Immutable_Aggregation.class)
@JsonDeserialize(as = Immutable_Aggregation.class)
public abstract class 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

关于java - Jackson 子类序列化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42419842/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com