在我的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
,执行我的additional fancy stuff
然后调用超级班级&#39;来自MyController.update
方法的更新方法。但是这不起作用,因为我在编译期间遇到了模糊的映射错误。
有没有办法让Spring覆盖父类请求映射?我想避免拆分路线。
答案 0 :(得分:3)
正如您所注意到的那样,由于模糊映射,您无法做到这一点。
如果您想执行一些额外的代码,可以使用hook methods之类的内容。所以,在你的AbstractRESTController
中定义一个这样的空方法:
protected void doFancyStuff() {
}
Obs。:这里的空方法是更好的选择,而不是abstract
,这样就可以避免在所有具体控制器中使用空方法体来实现。
更改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
方法。