Я хочу реализовать следующие функциональные возможности: при сериализации моей модели dto в ответе от метода контроллера ее обычно следует возвращать без пары полей (например, name
field), но дляДля некоторых конечных точек модель должна быть возвращена полностью (с полем name
).
Чтобы реализовать это, я пометил поле в моей модели, которое я хочу скрыть от ответа, с помощью @JsonView
как:
@JsonView(View.Detail.class)
private String name;
, и я установилсвойство DEFAULT_VIEW_INCLUSION для true
, идея в том, что если я не добавлю аннотацию @JsonView
в метод контроллера, он вернет модель без поля name
: свойство enabled будетзаставьте Джексона сериализовать каждое поле в модели без аннотации @JsonView
, и name
не следует сериализовать, потому что, ну, в общем, представление не задано, в частности, View.Detail
не установлено, поэтому поле, которое ожидает это представление, должноне быть сериализованным.
Однако это не сработает.Когда я не отмечаю метод контроллера с помощью @JsonView
, создается впечатление, что Джексон полностью игнорирует любые @JsonView
аннотации на модели и сериализует все при возврате ответа от этогоmethod.
Единственный способ заставить его работать, это аннотировать каждый метод контроллера, где я хочу, чтобы моя функциональность по умолчанию (модель dto сериализована без поля name
) с помощью фиктивного @JsonView(View.SomeDummyView.class)
.Когда я делаю это, поскольку я включил DEFAULT_VIEW_INCLUSION, он снова сериализует все без аннотации @JsonView
и не сериализует name
, потому что для него требуется представление View.Details.class
, а не View.SomeDummyView.class
.
Теперь мой вопрос: как я могу заставить Джексона проверять аннотации @JsonView
на полях в модели для каждого сериализованного ответа, даже если метод контроллера, который генерирует этот ответ, не являетсяотмечены @JsonView
?