公开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
注释类中重复所有的idiomic代码,但对于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
}
}
答案 0 :(得分:0)
只需向存储库界面添加方法即可。
class CustomerRepository {
public List<Customer> findRecent();
}
给定方法将在/customers/findRecent
下导出。您可以使用@RestResource
注释调整路径。
谈论你的第二个案例,例如 @GET customers /:id / photo ,由Spring Data Rest透明处理,意味着,如果您的实体Customer
具有photo
关联,则会将其导出在那个开箱即用的网址下。