Определение пользовательских методов с путем /{resourcename}/search/ с использованием spring-data-rest

Я сбит с толку. Я не мог выяснить, как определить пользовательские методы «поиска» вместе с методами, которые были загружены с помощью spring-data-rest. Не могли бы вы мне ответить, есть ли у фреймворка такая возможность "из коробки"? И если есть, не могли бы вы сказать мне, где я могу его найти?

Для более глубокого понимания моей ситуации я описываю свою проблему:

class UserService {
    public String getListOfWaitingUsers() {

        return userRepository.findAll(UserSpecification.isWaiting());
    }
} 

public interface UserRepository extends PagingAndSortingRepository<User, Long>{
   Page<User> findByNameLike(@Param("name") String name, Pageable pageable);
}

Я хочу, чтобы это было так:

/user/search/
        findByNameLike
        findWaitingUsers

Как реализовать, чтобы мои методы спецификаций или сервисов (в репозитории нет метода) определялись путем "/resource_name/search/METHOD_NAME" ( методы репозитория + ( МЕТОДЫ УСЛУГИ ИЛИ ТЕХНИЧЕСКИЕ ХАРАКТЕРИСТИКИ)


person yaroslav.mykhailov    schedule 28.04.2014    source источник


Ответы (1)


  • Фреймворк Spring Data REST основан на репозитории Spring Data, поэтому ваш класс обслуживания здесь можно игнорировать.
  • Все методы, которые не являются частью репозитория CRUD/Paging Repository, представленные как методы «поиска», при условии, что вы аннотировали все параметры аннотацией @Param. Итак, в вашем случае вам нужно реализовать свой метод, следуя обзор соглашений в документах Spring Data commons. Таким образом, если у вас есть реализация для метода findByNameLike, этот метод будет отображаться как URL-адрес ../search/findByNameLike. При необходимости вы можете настроить rel и путь с аннотацией @RestResource.
  • Также обратите внимание, что ваш UserRepository в идеале должен работать только с объектом User и, следовательно, с определенными вами методами. В вашем случае UserRepository возвращает Process/ProcessContext объектов? Вместо этого это должно быть, как показано ниже

    public interface UserRepository extends PagingAndSortingRepository<User, Long>{
      Page<User> findByNameLike(@Param("name") String name, Pageable pageable);
    }
    
person Stackee007    schedule 28.04.2014