Джексон Миксин игнорирует свойство при использовании @JsonUnwrapped, но только в некоторых случаях - PullRequest
0 голосов
/ 16 ноября 2018

С Джексоном я использую интерфейсы 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.Но есть особый случай, когда я хочу игнорировать одно свойство SharedMixin при развертывании в родительском Mixin, предположим, что я хочу игнорировать поле имени.Я пробовал следующее, но безуспешно.

@JsonPropertyOrder({"otherField", "sharedMixin"})
public interface AnotherMixin2 {
  String otherField();

  @JsonUnwrapped
  SharedMixin getSharedMixin();

  @JsonIgnore()
  String getName();
}

Я также пытался использовать "@JsonIgnoreProperties ({" name "})", но ни один из них не работал, похоже, что свойство все еще существует при сериализации, но с пустым значением.

Обратите внимание, что я не могу использовать @JsonIgnore () внутри SharedMixin, потому что он будет игнорировать поле во всех классах, которые его используют, и они кратны.

1 Ответ

0 голосов
/ 19 ноября 2018

Похоже, что это ошибка в библиотеке Джексона, @JsonUnwrapped и @JsonIgnoreProperties не очень хорошо работают вместе.

https://github.com/FasterXML/jackson-dataformats-text/issues/77

...