在我的 Java Spring MVC 4 项目中,我有一个带有更新方法的 AbstractRESTController:
@RequestMapping(
value="/{id}",
method=RequestMethod.PUT,
consumes={MediaType.APPLICATION_JSON_VALUE}
)
public @ResponseBody ResponseEntity<T> update(@PathVariable ID id,
@RequestParam String token, @RequestBody T json) {
[do fancy stuff]
}
还有一个扩展类,我们称之为MyController
。通常我想使用抽象类中的方法,但在 MyController 中我有一个特殊情况(耶!),所以我需要做进一步的工作。
我的想法是只覆盖子类中的@RequestMapping
,做我的额外的花哨的东西
,然后从调用父类(super class)的更新方法MyController.update
方法。但这不起作用,因为我在编译过程中遇到了不明确的映射错误。
有没有办法让Spring重写父类请求映射?我想避免分割路线。
最佳答案
正如您所注意到的,您无法执行此操作,因为映射不明确。
如果你想执行一些额外的代码,你可以使用类似hook methods的东西。因此,在您的 AbstractRESTController
中定义一个空方法,如下所示:
protected void doFancyStuff() {
}
观察:空方法在这里是更好的选择,而不是抽象方法,以避免在所有具体 Controller 中即使使用空方法体也需要实现。
将update方法改为调用hook方法:
@RequestMapping(
value="/{id}",
method=RequestMethod.PUT,
consumes={MediaType.APPLICATION_JSON_VALUE}
)
public @ResponseBody ResponseEntity<T> update(@PathVariable ID id,
@RequestParam String token, @RequestBody T json) {
doFancyStuff();
}
在 MyController
中,您将重写并实现 doFancyStuff
方法。
关于java - 使用继承覆盖 @RequestMapping 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27905856/