Spring Data Rest - 配置findBy路径
Spring Data Rest - Configure findBy path
具有以下存储库:
@RepositoryRestResource(collectionResourceRel = "people", path = "people")
public interface PeopleRepository extends PagingAndSortingRepository<People, String> {
@RestResource
List<People> findByName(@Param("name") String name);
}
URL for findByName
自动设置为 /people/search/findByName
。但这似乎很冗长,可以将 URL 配置为 /people
并且查询类似于 /people?name=john
吗?
如果您使用 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
等等
您可以更改路径的最后一部分(参见 doc):
@RestResource(path = "byName", rel = "byName")
List<People> findByName(@Param("name") String name);
/people/search/byName?name=john
有关 QueryDsl 的全面实施,请参阅@AlanHay 的回答(更多信息是 )
具有以下存储库:
@RepositoryRestResource(collectionResourceRel = "people", path = "people")
public interface PeopleRepository extends PagingAndSortingRepository<People, String> {
@RestResource
List<People> findByName(@Param("name") String name);
}
URL for findByName
自动设置为 /people/search/findByName
。但这似乎很冗长,可以将 URL 配置为 /people
并且查询类似于 /people?name=john
吗?
如果您使用 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
等等
您可以更改路径的最后一部分(参见 doc):
@RestResource(path = "byName", rel = "byName")
List<People> findByName(@Param("name") String name);
/people/search/byName?name=john
有关 QueryDsl 的全面实施,请参阅@AlanHay 的回答(更多信息是