对于Jackson,我使用Mixin接口进行串行化。
假设我有一个被多个类使用的公共类,这里是该类的Mixin:
@JsonPropertyOrder({"id", "name"})
interface SharedMixin {
String getId();
String getName();
}
该Mixin由多个Mixin使用@JsonUnwrapped注解使用,如下所示:
@JsonPropertyOrder({"code", "sharedMixin"})
public interface AnotherMixin {
String getCode();
@JsonUnwrapped
SharedMixin getSharedMixin();
}
这样做很好,它从SharedMixin接口中解包所有属性。但是有一个特殊的情况,当我在父Mixin中解包时,我想忽略SharedMixin的一个属性,假设我想忽略name字段。我尝试了下面的方法,但是没有成功。
@JsonPropertyOrder({"otherField", "sharedMixin"})
public interface AnotherMixin2 {
String otherField();
@JsonUnwrapped
SharedMixin getSharedMixin();
@JsonIgnore()
String getName();
}
我还尝试使用“@JsonIgnoreProperties({“name”})”,但两种方法都不起作用,看起来序列化时属性仍然存在,但值为空。
请注意,我不能在SharedMixin中使用@JsonIgnore(),因为它将忽略所有使用它的类中的字段,并且它们是多个的。
2条答案
按热度按时间pjngdqdw1#
这 似乎 是 Jackson 库 中 的 一 个 Bug ,@JsonUnwrapped 和@JsonIgnoreProperties 不能 很 好 地 配合 使用 。
https://github.com/FasterXML/jackson-dataformats-text/issues/77 的 最 大 值
snz8szmq2#
诚然,
@JsonIgnore
和@JsonIgnoreProperties
不能与@JsonUnwrapped
一起正常工作,但是将@JsonIgnoreProperties
放在字段本身上至少有助于常规序列化,而无需mixin:How to ignore specific sub-field of an unwrapped field (CSV)