Программно игнорировать (опускать) определенные поля в ответе JSON службы REST БЕЗ изменения класса объекта DTO - PullRequest
0 голосов
/ 19 сентября 2019

У меня есть класс DTO и некоторые службы REST, которые иногда возвращают (среди прочего) список этих DTO.

Я не могу изменить этот DTO, так как он используется в нескольких местах проекта.

Однако, только для одной конкретной службы REST , мне нужно исключить некоторые поля этого объекта DTO.

В принципе мне нужно иметь возможность применить thisрешение только в определенной точке.

Я попытался применить @JsonFilter("restrictionFilter") к своему классу DTO, но затем я получаю сообщение об ошибке, если я не использую этот фильтр с картографическим модулем каждый раз, когда я выполняю маршалинг объектав JSON, например:

final String writeValueAsString = mapper.writer(
  new SimpleFilterProvider()
    .addFilter("restrictionFilter", 
                SimpleBeanPropertyFilter.filterOutAllExcept("name", "sizeInByte"))
  ).writeValueAsString(objectsList);

Ошибка: Невозможно разрешить PropertyFilter с идентификатором 'limittionFilter';нет настроенного FilterProvider ...

Есть идеи?

Спасибо.

1 Ответ

0 голосов
/ 19 сентября 2019

Эта проблема звучит как идеальное использование шаблона оформления Decorator.Создайте новый DTO с помощью конструктора, который получает исходный DTO, и создайте те, которые получают методы, которые вы хотите, или игнорируйте все методы get, которые вам нравятся.Например:

public class NewDto {

    OldDto oldDto;

    public NewDto(OldDto oldDto){
        this.oldDto = oldDto;
    }

    public String getName(){
        return oldDto.getName();
    }
}

Теперь вам нужно будет только вернуть объект NewDto, например:

return new NewDto(oldDto)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...