java – Spring Data REST:覆盖控制器上的存储库方法
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了java – Spring Data REST:覆盖控制器上的存储库方法,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2163字,纯文字阅读大概需要4分钟。
内容图文
![java – Spring Data REST:覆盖控制器上的存储库方法](/upload/InfoBanner/zyjiaocheng/709/7e1a0c44df434dd4bc8f4499c0f06d5b.jpg)
我有以下REST存储库,其实现由Spring在运行时生成.
@RepositoryRestResource
public interface FooRepository extends CrudRepository<Foo, Long> {
}
这意味着我将通过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);
}
}
问题:
如果我启用此控制器,那么Spring实现的所有其他方法都不再暴露.因此,例如,我不能再对/ foo / 1执行GET请求
题:
有没有一种方法可以覆盖REST方法,同时仍然保留其他自动生成的Spring方法?
额外信息:
>这个问题似乎很相似:
Spring Data Rest: Override Method in RestController with same request-mapping-path …但我不想改变/ foo / 1 / save之类的路径
>我想过使用@RepositoryEventHandler,但我不是很喜欢这个想法,因为我想将它封装在一个服务之下.此外,您似乎失去了对事务上下文的控制.
> This part of the Spring Data documentation说如下:
Sometimes you may want to write a custom handler for a specific
resource. To take advantage of Spring Data REST’s settings, message
converters, exception handling, and more, use the
@RepositoryRestController annotation instead of a standard Spring MVC
@Controller or @RestController
所以它似乎应该开箱即用,但不幸的是没有.
解决方法:
Is there a way of overriding REST methods while still keeping the other auto-generated Spring methods?
仔细查看文档中的示例:虽然没有明确禁止类级请求映射,但它使用方法级请求映射.
我不确定这是否是想要的行为或错误,但据我所知,这是让它工作的唯一方法,如here所述.
只需将您的控制器更改为:
@RepositoryRestController
public class FooController {
@Autowired
FooService fooService;
@RequestMapping(value = "/foo/{fooId}", method = RequestMethod.PUT)
public void updateFoo(@PathVariable Long fooId) {
fooService.updateProperly(fooId);
}
// edited after Sergey's comment
@RequestMapping(value = "/foo/{fooId}", method = RequestMethod.PUT)
public RequestEntity<Void> updateFoo(@PathVariable Long fooId) {
fooService.updateProperly(fooId);
return ResponseEntity.ok().build(); // simplest use of a ResponseEntity
}
}
内容总结
以上是互联网集市为您收集整理的java – Spring Data REST:覆盖控制器上的存储库方法全部内容,希望文章能够帮你解决java – Spring Data REST:覆盖控制器上的存储库方法所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。