Spring проекции без Spring Data REST - PullRequest
       10

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

0 голосов
/ 10 сентября 2018

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, хотя реальный пример немного сложнее). По сути, я бы хотел избежать возврата вложенных коллекций с некоторых конечных точек.

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

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

Ответы [ 2 ]

0 голосов
/ 10 сентября 2018

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

В качестве альтернативы вы можете создать DTO вместо полной сущности, но это, ИМХО, элегантный подход.

0 голосов
/ 10 сентября 2018

Вы можете использовать фильтры свойств 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;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...