Spring Data Rest-配置findBy路径

时间:2019-04-24 09:14:31

标签: spring jpa spring-data-jpa spring-data spring-data-rest

具有以下存储库:

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

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

}

findByName的URL自动设置为/people/search/findByName。但是似乎很冗长,可以将URL配置为/people并查询像/people?name=john吗?

2 个答案:

答案 0 :(得分:2)

如果您使用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 

答案 1 :(得分:0)

您可以更改路径的最后一部分(请参见doc

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

有关QueryDsl的全面实现,请参见@AlanHay答案(更多信息为here