Spring Data Rest自定义控制器

时间:2016-05-06 19:19:32

标签: spring spring-data spring-data-rest

我有一个要求,我需要在哪里使用自定义控制器覆盖其余资源的删除功能。这是restResource的代码

@RepositoryRestResource
    public interface SampleRepository extends JpaRepository<Sample,Long>{
List<Sample> findBySampleNumber(@Param("sampleNumber") String sampleNumber);
    }

我创建了一个自定义控制器,仅覆盖删除功能

@RepositoryRestController
@RequestMapping("/api/samples")
public class SampleController{
    @Autowired
    SampleRepository sampleRepository;

    @RequestMapping(value = "/{id}", method = RequestMethod.DELETE)
    @ResponseBody
    public void delete(@PathVariable Long id) {
        //do some custom logic here
        //then delete the sample
        //sampleRepository.delete(id);

    }

但是,如果现在尝试在RepositoryRestResource上创建GET api/samples/1(someId)或查找某些搜索功能,我会看到以下错误

"description": "Request method 'GET' not supported"

是否有办法只覆盖一个HTTP动词,其余的功能来自存储库。

但是,如果我从控制器发表评论public void delete,我可以访问所有的crud和搜索操作

有没有人遇到过这样的问题

我正在使用SPRING_DATA_REST-2.5.1-Release

2 个答案:

答案 0 :(得分:5)

您必须在method level only上使用RequestMapping注释。

答案 1 :(得分:5)

您需要将控制器定义为

@RepositoryRestController
public class SampleController{
    @Autowired
    SampleRepository sampleRepository;

    @RequestMapping(value = "/api/samples/{id}", method = RequestMethod.DELETE)
    public void delete(@PathVariable Long id) {

    }

弹出数据提供了在域创建,保存和删除之前和之后执行的不同事件。

参考http://docs.spring.io/spring-data/rest/docs/current/reference/html/#events