gpt4 book ai didi

java - 如何控制库类的 Jackson 序列化

转载 作者:搜寻专家 更新时间:2023-10-31 08:11:55 25 4
gpt4 key购买 nike

我有一个类(让我们称它为 Piece )包含类型为 com.jme3.math.ColorRGBA 的成员.使用默认的 Jackson 序列化,成员不仅被序列化为其成员 r , g , ba , 但随后也使用像 getAlpha 这样的 setter/getter .

因为这显然是多余的,所以我想控制序列化并只序列化那些主要成员。是否有一些我可以写到我的类中的注释来控制类型不受我控制的成员的序列化,或者为他们编写一些自定义序列化程序?

我或许可以为 Piece 编写自定义序列化程序类,虽然不是ColorRGBA序列化程序过于冗长,默认序列化对我来说适用于 Piece 的所有其他属性,因此我想尽可能少地自定义它。

我不想修改jme3库源,解决方案应在 ColorRGBA 之外实现类。

最佳答案

您可以使用mixin 来确保根据您的需要对类进行序列化。请考虑以下事项:

// The source class (where you do not own the source code)
public class ColorRGBA {
public float a; // <-- Want to skip this one
public float b;
public float g;
public float r;
}

然后,在忽略 a 属性的地方创建混入。

// Create a mixin where you ignore the "a" property
@JsonIgnoreProperties("a")
public abstract class RGBMixin {
// Other settings if required such as @JsonProperty on abstract methods.
}

最后,使用 mixin 配置映射器:

ObjectMapper mapper = new ObjectMapper();
mapper.addMixInAnnotations(ColorRGBA.class, RGBMixin.class);
System.out.println(mapper.writeValueAsString(new ColorRGBA()));

输出将是:

{"b":0.0,"g":0.0,"r":0.0}

请注意方法 ObjectMapper.addMixInAnnotations 已从 Jackson 2.5 中弃用,应替换为更流畅的版本:

mapper.addMixIn(ColorRGBA.class, RGBMixin.class);

JavaDocs 可以是 found here

关于java - 如何控制库类的 Jackson 序列化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28172695/

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