Spring 数据存储库和休息控制器:端点混合和覆盖
Spring data repository and rest controller: end point mixing & overriding
为 REST 资源公开以下端点是很常见的
@GET customers/ ==> list of customers
@POST customers/ ==> add a customer
@Get customers/:id ==> specific info of customer
@PUT customers/:id ==> override a customer
@PATCH customers/:id ==> update customer
Spring 数据存储库可以很好地处理这个问题。
但是如果我想添加自定义端点,例如
@GET customers/recent ==> 检索最近访问过的客户
@GET customers/:id/photo ===> 所有属于该客户的照片
有没有办法添加到现有的端点集?
当然,我们可以在 @RestController
注释 class 中重复所有惯用代码,但是对于 10+ 资源来说,这将是非常重复的。
我要找的是这样的
class CustomerController{
// all @GET, @POST, @PUT, @PATCH methods are already generated, like a data rest repository
@RequestMapping(value = "/{customerId}/photo", method = RequestMethod.GET)
public Collection<Photo> getAllPhotos(){
...
}
// it is also possible to override @POST request here
public Collection<Customer> getCustomers(){
// more logic
}
}
只需向您的存储库接口添加一个方法。
class CustomerRepository {
public List<Customer> findRecent();
}
给定的方法将在 /customers/findRecent
下导出。您可以使用 @RestResource
注释调整路径。
谈谈你的第二个案例,例如@GET customers/:id/photo,t 由 Spring 数据 Rest 透明处理,这意味着,如果您的实体 Customer
有一个 photo
association,它是在开箱即用的 url 下导出的。
为 REST 资源公开以下端点是很常见的
@GET customers/ ==> list of customers
@POST customers/ ==> add a customer
@Get customers/:id ==> specific info of customer
@PUT customers/:id ==> override a customer
@PATCH customers/:id ==> update customer
Spring 数据存储库可以很好地处理这个问题。
但是如果我想添加自定义端点,例如
@GET customers/recent ==> 检索最近访问过的客户 @GET customers/:id/photo ===> 所有属于该客户的照片
有没有办法添加到现有的端点集?
当然,我们可以在 @RestController
注释 class 中重复所有惯用代码,但是对于 10+ 资源来说,这将是非常重复的。
我要找的是这样的
class CustomerController{
// all @GET, @POST, @PUT, @PATCH methods are already generated, like a data rest repository
@RequestMapping(value = "/{customerId}/photo", method = RequestMethod.GET)
public Collection<Photo> getAllPhotos(){
...
}
// it is also possible to override @POST request here
public Collection<Customer> getCustomers(){
// more logic
}
}
只需向您的存储库接口添加一个方法。
class CustomerRepository {
public List<Customer> findRecent();
}
给定的方法将在 /customers/findRecent
下导出。您可以使用 @RestResource
注释调整路径。
谈谈你的第二个案例,例如@GET customers/:id/photo,t 由 Spring 数据 Rest 透明处理,这意味着,如果您的实体 Customer
有一个 photo
association,它是在开箱即用的 url 下导出的。