@RepositoryRestResource中的自定义实现

时间:2019-12-20 10:16:23

标签: java rest spring-boot jpa

我正在开发一个使用@RepositoryRestResource的spring-boot项目。

有2个实体,ProductDomain,具有多对多关系。

我想实现运行复杂查询的自定义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

我想念什么?

谢谢。

1 个答案:

答案 0 :(得分:1)

显然,这是设计无法实现的。但是,如果使用@Query注释,则自定义方法将起作用。 参见implementing-custom-methods-of-spring-data-repository-and-exposing-them...