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

如何在不使用UUID的情况下在Spring数据REST中按字段值搜索?,spring,java-8,spring-data-rest,Spring,Java 8,Spring Data Rest,我第一次使用了springdatarest,我是这项技术的新手 我有这样一个场景: 公开公司和产品的web应用程序 每个公司都可以有一个或多个产品 我的基本实现似乎运行良好 当我转到URL:https://localhost:8881/my project/api/companys 我有一个结果: { "_embedded" : { "companies" : [ { "companyName" : "Company_Name", "companyId"

我第一次使用了
springdatarest
,我是这项技术的新手

我有这样一个场景:

  • 公开公司和产品的web应用程序
  • 每个公司都可以有一个或多个产品
我的基本实现似乎运行良好

当我转到URL:
https://localhost:8881/my project/api/companys

我有一个结果:

{
  "_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"
        }
      }
    }, 
如果我转到URL:
https://localhost:8881/my project/api/companys/015d8038-96dc-42cb-94af-1ab49158150f/products

我获得那家公司的所有产品。 这是正确的,但我希望在URL中不使用
UUID
而获得相同的结果,例如:
https://localhost:8881/my project/api/companys/companys\u Name/products

下面是我对公司存储库的实际实现:

public interface CompanyBaseRepository extends PagingAndSortingRepository<Company, UUID>{

}
public interface CompanyBaseRepository扩展了分页和排序存储库{
}
这是产品存储库:

public interface ProductBaseRepository extends PagingAndSortingRepository<Product, UUID>{

}
公共接口ProductBaseRepository扩展了分页和排序存储库{
}
应该使用什么实现来完成此任务


谢谢。

在spring文档中[这里][1]

请参阅第1.3.1节向单个存储库添加自定义行为 基本上,您想要的是创建一个自定义接口,创建一个实现该接口并执行您想要的操作的类。并使您的ProductBaseRepository也扩展了这一功能。所以你可能想要:

1) 创建一个接口ProductCustomRepository(此处创建方法以查找公司名称中的产品) 2) 创建类ProductCustomRepositoryImpl,该类实现上述接口(此处实现方法以查找公司名称中的产品)。 3) 让您的ProductBaseRepository也扩展ProductCustomRepository


如果你还需要什么,我会补充更多的细节,但这是非常容易的,你可以管理这个没有问题,我想

我找到了另一种方法

我在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);

}
public interface CompanyBaseRepository扩展了crudepository{
@RestResource(path=“byName”,rel=“byName”)
公司findByCompanyName(@Param(“公司”)字符串companyName);
@RestResource(path=“byId”,rel=“byId”)
Company findByCompanyId(@Param(“Company”)字符串companyId);
}
结果可在URL中获得: 或:


谢谢大家

您的意思是,您想使用公司名称而不是uuid?没错,我想使用公司名称而不是uuid进行访问。首先,您确定公司名称将始终是唯一的吗?是的,公司名称将始终是唯一的。客户不应(!)构建链接,而应仅使用收到的链接。因此,如果您不发送包含名称的链接,客户机如何知道它们?为什么你要发送包含名字的链接呢?现在谢谢你,我会开始考虑这个想法!