如何在不使用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应用程序
- 每个公司都可以有一个或多个产品
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进行访问。首先,您确定公司名称将始终是唯一的吗?是的,公司名称将始终是唯一的。客户不应(!)构建链接,而应仅使用收到的链接。因此,如果您不发送包含名称的链接,客户机如何知道它们?为什么你要发送包含名字的链接呢?现在谢谢你,我会开始考虑这个想法!