Использовать создание ссылки по умолчанию в Spring Data Rest

У меня есть класс сущности «Сотрудник», 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, но не уверен, что это решение.

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

Вы создали собственный контроллер / службу, поэтому вам нужно будет собрать ресурсы. Вы можете использовать встроенную поддержку QueryDSL, чтобы Spring Data Rest обрабатывал фильтрацию (то есть без настраиваемого контроллера или службы), и вы бы получили желаемый ответ, добавив параметры запроса, например. /employees?surname=smith

Alan Hay 26.10.2018 16:00
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Версия Java на основе версии загрузки
Версия Java на основе версии загрузки
Если вы зайдете на официальный сайт Spring Boot , там представлен start.spring.io , который упрощает создание проектов Spring Boot, как показано ниже.
Документирование API с помощью Swagger на Springboot
Документирование API с помощью Swagger на Springboot
В предыдущей статье мы уже узнали, как создать Rest API с помощью Springboot и MySql .
0
1
302
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Вспомогательный фрагмент - Стратегия обнаружения:

Detection strategy

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

Привет, Картик, я не уверен, правильно ли я понимаю, но моя проблема не в добавлении новой ссылки для одного из моих методов. Я получаю список сотрудников, и я хочу, чтобы Spring Data Rest добавлял все ссылки, которые будут созданы, когда я вызываю URL-адрес по умолчанию ... / employee

user8914226 26.10.2018 12:41
Ответ принят как подходящий

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

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

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

Матиас

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