我第一次使用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>{
}
应该使用什么实现来完成这项任务?
感谢。
答案 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
感谢所有人!