JacksonMixin在使用@JsonUnwrapped时忽略属性,但仅限于某些情况

hrysbysz  于 2022-11-08  发布在  其他
关注(0)|答案(2)|浏览(182)

对于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(),因为它将忽略所有使用它的类中的字段,并且它们是多个的。

pjngdqdw

pjngdqdw1#

这 似乎 是 Jackson 库 中 的 一 个 Bug ,@JsonUnwrapped 和@JsonIgnoreProperties 不能 很 好 地 配合 使用 。
https://github.com/FasterXML/jackson-dataformats-text/issues/77 的 最 大 值

snz8szmq

snz8szmq2#

诚然,@JsonIgnore@JsonIgnoreProperties不能与@JsonUnwrapped一起正常工作,但是将@JsonIgnoreProperties放在字段本身上至少有助于常规序列化,而无需mixin:
How to ignore specific sub-field of an unwrapped field (CSV)

相关问题