@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)
,