Spring Data Rest自定义控制器

Rag*_*nya 6 spring spring-data spring-data-rest

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

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

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

@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);

    }
Run Code Online (Sandbox Code Playgroud)

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

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

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

但是,如果我public void delete从控制器中进行评论,则可以访问所有的Crud和Search操作

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

我在用 SPRING_DATA_REST-2.5.1-Release

Mar*_*rin 6

您只需要在方法级别使用RequestMapping批注。


NIr*_*odi 6

您需要将控制器定义为

@RepositoryRestController
public class SampleController{
    @Autowired
    SampleRepository sampleRepository;

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

    }
Run Code Online (Sandbox Code Playgroud)

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

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