Spring Data Rest - настройка пути findBy - PullRequest
0 голосов
/ 24 апреля 2019

Со следующим репозиторием:

@RepositoryRestResource(collectionResourceRel = "people", path = "people")
public interface PeopleRepository extends PagingAndSortingRepository<People, String> {

    @RestResource
    List<People> findByName(@Param("name") String name);

}

URL для findByName автоматически устанавливается на /people/search/findByName. Но это кажется довольно многословным, может ли URL быть настроен на /people, а запрос похож на /people?name=john?

Ответы [ 2 ]

2 голосов
/ 24 апреля 2019

Если вы используете расширение QueryDSL, вы можете иметь запрос в этом формате и иметь дополнительное преимущество, заключающееся в возможности фильтрации по любой комбинации свойств без необходимости писать какие-либо методы запроса:

Конфигурация (при условии Maven)

<dependency> 
    <groupId>com.querydsl</groupId> 
    <artifactId>querydsl-apt</artifactId> 
    <version>4.1.4</version>
    </dependency>
<dependency> 
    <groupId>com.querydsl</groupId> 
    <artifactId>querydsl-jpa</artifactId> 
    <version>4.1.4</version> 
</dependency>

Затем просто обновите определение вашего репозитория:

@RepositoryRestResource(collectionResourceRel = "people", path = "people")
public interface PeopleRepository extends PagingAndSortingRepository<People, String>, 
                                               QuerydslPredicateExecutor<People> {


}

Теперь вы должны иметь возможность фильтровать как:

/people?name=john
/people?name=John&address.town=London 

и т.д.

0 голосов
/ 24 апреля 2019

Вы можете изменить последнюю часть пути (см. документ ):

@RestResource(path = "byName", rel = "byName")
List<People> findByName(@Param("name") String name);
/people/search/byName?name=john

Для полной реализации с QueryDsl см. Ответ @AlanHay (более подробная информация здесь )

...