来自Struts2我习惯于在超类(或package-info.java
)上声明@Namespace
注解,并且继承类将随后选取其祖先的@Namespace
注释中的值并将其预先加载到请求路径为行动。我现在要做的使用@RequestMapping
注释在Spring MVC类似如下(修剪简码):Spring MVC @RequestMapping继承
package au.test
@RequestMapping(value = "/")
public abstract class AbstractController {
...
}
au.test.user
@RequestMapping(value = "/user")
public abstract class AbstractUserController extends AbstractController {
@RequestMapping(value = "/dashboard")
public String dashboard() {
....
}
}
au.test.user.twitter
@RequestMapping(value = "/twitter")
public abstract class AbstractTwitterController extends AbstractUserController {
...
}
public abstract class TwitterController extends AbstractTwitterController {
@RequestMapping(value = "/updateStatus")
public String updateStatus() {
....
}
}
/
作品预计/user/dashboard
按预期工作- 然而,当我想预计
/user/twitter/updateStatus
工作它没有和检查日志我可以看到一个日志条目,看起来像这样:
org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping - 映射的URL路径[/高音/ updateStatus]在处理 'twitterController'
是否有设置我可以启用将扫描超类为@RequestMapping
注释并构建正确的路径?
另外我还认为在package-info.java
的封装上定义@RequestMapping
是非法的?
你有没有任何机会得到任何其他建议,如何实现这一点。在我看来,像一个废物不得不把/ x/y/z放在一个子类环境中。然后,如果我决定更改/ x/to/k /,我必须到代码中定义的所有位置并手动更改它! – garyj
@chris:这不适合我。是否涉及配置步骤,还是仅仅是注释问题?基本控制器确实与扩展基本控制器的控制器在同一个包中。但是,基本控制器的URI/RequestMapping被忽略和/或未找到。 “org.springframework.web.servlet.DispatcherServlet:947 - 没有找到具有URI的HTTP请求的映射”。所以,如果我只是使用扩展控制器的“基础”RequestMapping,那很好。如果我尝试使用由基本控制器继承的RequestMapping,则无法找到URI。 – Rick
它的值得明确指出,超类路径仍然可路由。也就是说,覆盖一个类并提供新的@ RequestMapping不会覆盖或替换超类的@ RequestMapping,它只是增加了一些。例如,在OP的问题中,这意味着所有这些路径都是有效的:'/ user/dashboard','/ twitter/updateStatus'。 – kuporific