Проекции Spring без Spring Data REST

spring-data-rest предоставляет фантастический способ определения вида объекта - проекции Spring. Мне любопытно, есть ли способ достичь аналогичной функциональности без использования spring-data-rest - просто репозитории и простые контроллеры отдыха.

Допустим, у меня есть сущность:

@Entity
public class Customer {

  @Id
  @GeneratedValue(strategy = GenerationType.AUTO)
  private Long id;

  private String firstname;
  private String lastname;

  // … 
}

и две конечные точки контроллера. Один должен вернуть полную сущность, а второй - единственное подмножество сущности (например, просто firstname, хотя реальный пример немного сложнее). По сути, я хотел бы избежать возврата вложенных коллекций с некоторых конечных точек.

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

Итак, мой вопрос: нужно ли мне иметь две сущности с двумя отдельными репозиториями или есть более элегантный способ сделать это в Spring?

Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
1
0
580
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Вы можете использовать фильтры свойств Spring, чтобы отфильтровать несколько полей из ответа на API:

@RequestMapping(...)
public MappingJacksonValue getUserEntities(...) 
    Page<UserEntity> entities = service.findAll();
    MappingJacksonValue mappingJacksonValue = new MappingJacksonValue(entities);
    FilterProvider filters = new SimpleFilterProvider()
                .addFilter("UserEntity", SimpleBeanPropertyFilter
                        .filterOutAllExcept("fieldName"));
    mappingJacksonValue.setFilters(filters);
    return mappingJacksonValue;
}

Вы можете использовать Просмотры JSON, чтобы отфильтровать нужные вам поля. Вот такие Примеры.

В качестве альтернативы вы можете создать DTO вместо полного объекта, но это, IMHO, элегантный подход.

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