@JsonView: разные перспективы

Я пишу Spring Web Service, используя Джексона по умолчанию. Я использую @JsonView, чтобы указать, какое свойство мне нужно проанализировать для моего объекта JSON. Итак, проблема в том, что многие объекты используются в разных классах, но не во всех их свойствах, например:

class Professor {
  @JsonView({Views.Public.class, Views.Internal.class})
  private int id;
  @JsonView(Views.Internal.class)
  private String name;
  ...
}

class Classroom {
  @JsonView({Views.Public.class, Views.Internal.class})
  private int id;
  @JsonView(Views.Internal.class)
  private String name;
  ...
}

class Lecture {
  @JsonView(Views.Public.class)
  private Professor professor;
  @JsonView(Views.Public.class)
  private Classroom classroom;
  ...
}

Что если мне понадобится более двух "перспектив", мне придется создать больше интерфейсов / классов для этого? (например, Views.Prof Professor, Views.Principal, ...) Это действительно хорошая практика?

Я хотел бы услышать некоторые предложения или альтернативы, чтобы решить это. Я немного смущен тем, что на правильном пути.

1 ответ

Решение

Общие имена

Вы всегда можете определить больше представлений, если вам нужно больше представлений, это идея, лежащая в основе представлений Jackson JSON, и это делает ее гибкой.

Если вы используете общие имена в ваших классах представлений, таких как Basic, Extended, Public, Private и так далее, вам будет проще использовать их в нескольких бинах.

наследование

Вы всегда можете положиться на наследство с @JsonView, Рассмотрим следующий пример, где Views.Private продолжается Views.Public:

public class Views {
    interface Public {}
    interface Private extends Public {}
}

Сериализация свойств с пометкой @JsonView(Views.Private.class) будет также включать свойства, помеченные @JsonView(Views.Public.class),

Другие вопросы по тегам