相关疑难解决方法(0)

Spring Data REST:覆盖控制器上的存储库方法

我有以下REST存储库,其实现由Spring在运行时生成.

@RepositoryRestResource
public interface FooRepository extends CrudRepository<Foo, Long> {

}
Run Code Online (Sandbox Code Playgroud)

这意味着我将通过REST提供save(),find(),exists()和其他可用方法.

现在,我想覆盖其中一个方法; 例如,save().为此,我将创建一个暴露该方法的控制器,如下所示:

@RepositoryRestController
@RequestMapping("/foo")
public class FooController {

    @Autowired
    FooService fooService;


    @RequestMapping(value = "/{fooId}", method = RequestMethod.PUT)
    public void updateFoo(@PathVariable Long fooId) {
        fooService.updateProperly(fooId);
    }

}
Run Code Online (Sandbox Code Playgroud)

问题: 如果我启用了这个控制器,那么Spring实现的所有其他方法都不再暴露.因此,例如,我不能再对/ foo/1执行GET请求

问题: 是否有一种覆盖REST方法的方法,同时仍保留其他自动生成的Spring方法?

额外信息:

  1. 这个问题看起来非常相似: Spring Data Rest:RestController中的覆盖方法具有相同的请求映射路径 ......但我不想将路径更改为/ foo/1/save之类的东西

  2. 我想过使用@RepositoryEventHandler,但我不是很喜欢这个想法,因为我想把它封装在一个服务之下.此外,您似乎失去了对事务上下文的控制.

  3. Spring Data文档的这一部分说明如下:

    有时您可能希望为特定资源编写自定义处理程序.要利用Spring Data REST的设置,消息转换器,异常处理等,请使用@RepositoryRestController注释而不是标准的Spring MVC @Controller或@RestController

所以它似乎应该开箱即用,但不幸的是没有.

java rest spring spring-data-rest

17
推荐指数
3
解决办法
2万
查看次数

标签 统计

java ×1

rest ×1

spring ×1

spring-data-rest ×1