如何在不使用UUID的情况下按Spring Data REST中的字段值进行搜索?

时间:2016-03-22 11:04:32

标签: spring java-8 spring-data-rest

我第一次使用Spring Data REST而且我是这项技术的新手。

我有这种情况:

  • 公开公司和产品的网络应用
  • 每家公司都可以拥有一种或多种产品

我的基本实现似乎工作正常。

当我转到网址时:https ://localhost:8881/my-project/api/companies

我有这个结果:

{
  "_embedded" : {
    "companies" : [ {
      "companyName" : "Company_Name",
      "companyId" : "1234",
      "_links" : {
        "self" : {
          "href" : "https: //localhost:8881/my-project/api/companies/015d8038-96dc-42cb-94af-1ab49158150f"
        },
        "company" : {
          "href" : "https: //localhost:8881/my-project/api/companies/015d8038-96dc-42cb-94af-1ab49158150f{?projection}",
          "templated" : true
        },
        "products" : {
          "href" : "https: //localhost:8881/my-project/api/companies/015d8038-96dc-42cb-94af-1ab49158150f/products"
        }
      }
    }, 

如果我转到网址: https ://localhost:8881/my-project/api/companies/015d8038-96dc-42cb-94af-1ab49158150f/products

我获得该公司的所有产品。 这是正确的,但我希望在不使用网址中的UUID的情况下获得相同的结果,例如:https ://localhost:8881/my-project/api/companies/Company_Name/products

低于我对公司资源库的实际实施:

public interface CompanyBaseRepository extends PagingAndSortingRepository<Company, UUID>{

}

这是产品存储库:

public interface ProductBaseRepository extends PagingAndSortingRepository<Product, UUID>{

}

应该使用什么实现来完成这项任务?

感谢。

2 个答案:

答案 0 :(得分:0)

在春季文档[这里] [1] http://docs.spring.io/spring-data/data-commons/docs/1.7.x/reference/html/repositories.html

请参见1.3.1将自定义行为添加到单个存储库一节 基本上你想要的是创建一个自定义接口,创建一个实现这个接口的类,并做你想要的。并使您的ProductBaseRepository也扩展它。所以你可能想要:

1)创建一个接口ProductCustomRepository(这里创建方法来查找产品是公司名称) 2)创建实现上述接口的类ProductCustomRepositoryImpl(这里实现查找产品的方法是公司名称)。 3)使ProductBaseRepository也扩展ProductCustomRepository。

如果您还需要更多信息,我会添加更多详细信息,但这很简单,您可以毫无问题地管理这些问题。

答案 1 :(得分:-1)

我找到了另一种方式。

我在CompanyBaseRepository中添加了一个按名称公开搜索的方法:

public interface CompanyBaseRepository extends CrudRepository<Company, UUID>{

    @RestResource(path="byName", rel="byName")
    Company findByCompanyName(@Param("company") String companyName);

    @RestResource(path="byId", rel="byId")
    Company findByCompanyId(@Param("company") String companyId);

}

结果可在URL中获得: https://localhost:8881/my-project/api/companies/search/byId?company=9 要么: https://localhost:8881/my-project/api/companies/search/byName?company=test

感谢所有人!