来自Struts2,我习惯@Namespace在超类(或package- info.java)上声明批注,继承类随后会在@Namespace其祖先的批注中获取值并将其添加到Action的请求路径中。我现在正尝试在Spring MVC中使用@RequestMapping注解(如下所示,为简洁起见而修剪代码)执行类似的操作:
@Namespace
package- info.java
@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路径[/ tweeter / updateStatus]映射到处理程序’twitterController’
我是否可以启用一个设置,该设置将扫描超类以查找@RequestMapping注释并构造正确的路径?
我也认为@RequestMapping在包装中定义package-info.java是非法的?
package-info.java
以下基本上成为 /tweeter/updateStatus 和不 /user/tweeter/updateStatus
/tweeter/updateStatus
/user/tweeter/updateStatus
public abstract class TwitterController extends AbstractTwitterController { @RequestMapping(value = "/updateStatus") public String updateStatus() { .... } }
这是预期的行为,因为您已覆盖@RequestMapping在AbstractController和中声明的原始内容AbstractUserController。
AbstractController
AbstractUserController
实际上,当您声明AbstractUserController它也覆盖了@RequestMappingfor时AbstractController。它只是给您一种幻象,即/中的/ AbstractController已被继承。
“是否有我可以启用的设置,该设置将扫描超类以查找@RequestMapping注释并构建正确的路径?” 从来没听说过。