我有以下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方法?
额外信息:
这个问题看起来非常相似: Spring Data Rest:RestController中的覆盖方法具有相同的请求映射路径 ......但我不想将路径更改为/ foo/1/save之类的东西
我想过使用@RepositoryEventHandler,但我不是很喜欢这个想法,因为我想把它封装在一个服务之下.此外,您似乎失去了对事务上下文的控制.
有时您可能希望为特定资源编写自定义处理程序.要利用Spring Data REST的设置,消息转换器,异常处理等,请使用@RepositoryRestController注释而不是标准的Spring MVC @Controller或@RestController
所以它似乎应该开箱即用,但不幸的是没有.