我正在开发一个使用@RepositoryRestResource
的spring-boot项目。
有2个实体,Product
和Domain
,具有多对多关系。
我想实现运行复杂查询的自定义REST调用。
要实现自定义实现,我关注this blog。
产品存储库界面:
@RepositoryRestResource(collectionResourceRel = "product", path = "product")
public interface ProductRepository extends CrudRepository<Product, Long>, CustomProductRepository {
List<Product> findByName(@Param("name") String name);
}
CustomProductRepository.java-自定义REST调用的接口
public interface CustomProductRepository {
public List<Product> findByDomainName(String domainName);
}
ProductRepositoryImpl.java-它的实现。 (我遵循博客中提到的命名约定)
public class ProductRepositoryImpl implements CustomProductRepository {
@Override
public List<Product> findByDomainName(long id, String domainName) {
List<Product> result = new ArrayList<>();
// Query logic goes here
return result;
}
}
更新ProductRepository.java以扩展CustomProductRepository
@RepositoryRestResource(collectionResourceRel = "product", path = "product")
public interface ProductRepository extends CrudRepository<Product, Long>, CustomProductRepository {
List<Product> findByName(@Param("name") String name);
}
应用程序启动没有错误。我希望在调用http://localhost:8080/product/search
时,它应该列出我的自定义方法:findByDomainName
。但事实并非如此。
我得到的是:
{
"_links" : {
"findByName" : {
"href" : "http://localhost:8080/product/search/findByName{?name}",
"templated" : true
},
"self" : {
"href" : "http://localhost:8080/product/search/"
}
}
}
即使我打电话给http://localhost:8080/product/search/findByDomainName进行REST调用,我也会得到 404 。
我想念什么?
谢谢。
答案 0 :(得分:1)
显然,这是设计无法实现的。但是,如果使用@Query
注释,则自定义方法将起作用。
参见implementing-custom-methods-of-spring-data-repository-and-exposing-them...