Spring数据存储库和休息控制器:端点混合&覆盖

时间:2016-03-18 05:00:31

标签: spring rest spring-mvc spring-data-rest spring-restcontroller

公开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
    }
}

1 个答案:

答案 0 :(得分:0)

只需向存储库界面添加方法即可。

class CustomerRepository {

    public List<Customer> findRecent();      

}

给定方法将在/customers/findRecent下导出。您可以使用@RestResource注释调整路径。

谈论你的第二个案例,例如 @GET customers /:id / photo ,由Spring Data Rest透明处理,意味着,如果您的实体Customer具有photo关联,则会将其导出在那个开箱即用的网址下。