Использовать Spring Data Rest по умолчанию для создания ссылок - PullRequest
0 голосов
/ 26 октября 2018

У меня есть класс сущности "Сотрудник", Spring Data Rest возвращает всех сотрудников, когда я использую запрос Get по пути "../employees". По умолчанию он создает также ссылки на отношения @OneToMany. Например

        "_links": {
                "self": {
                    "href": "http://localhost:9000/mep/api/employees/1003"
                },
                "employee": {
                    "href": "http://localhost:9000/mep/api/employees/1003"
                },
                "assignmentProjectEmployeeSet": {
                    "href": "http://localhost:9000/mep/api/employees/1003/assignmentProjectEmployeeSet"
                }
            }

Является частью вывода. Теперь я отфильтрую этот список по спецификациям в следующем классе.

  @Service
  public class EmployeeFilterService {
   public Resources<Employee> getFilteredEmployees(Employee toBeFilteredEmployee) {

    List<Employee> filteredEmployees = employeeRepository.findAll(

          // filter stuff

    );

    List<Resource<Employee>> filteredEmployeesResources = new ArrayList<>();
    for (Employee e : filteredEmployees) {
        Resource<Employee> resource = new Resource<>(e);                      
        filteredEmployeesResources.add(resource);
    }
    return new Resources(filteredEmployeesResources);
   }
 }

К сожалению, на этот возврат нет ссылок. Я знаю, что могу добавлять ссылки вручную, но Spring Data Rest умеет создавать недостающие ссылки. Как я могу использовать это поведение по умолчанию?

Я прочитал кое-что о PageResources, но я не уверен, что это решение.

Спасибо за любую помощь Матиас

Ответы [ 2 ]

0 голосов
/ 31 октября 2018

Колледж смог мне помочь.Я искал следующий код:

public Resources<PersistentEntityResource> filterEmployee(@RequestParam Map<String, String> requestParam, PersistentEntityResourceAssembler assembler) {
    List<Employee> filteredList = employeeFilterService.getFilteredEmployees(requestParam);

    List<PersistentEntityResource> resourceList = new ArrayList<>();
    for (Employee e : filteredList) {
        resourceList.add(assembler.toResource(e));
    }
    return new Resources<>(resourceList);
}

Ключом является PersistentEntityResourceAssembler, а классу нужна аннотация

@RepositoryRestController

. При этом создаются нужные ссылки.

Матиас

0 голосов
/ 26 октября 2018

Фрагмент, который помогает - Стратегия обнаружения:

Detection strategy

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

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