让我先解释一下我的设置。
我的 Web 应用程序由多个模块组成,这些模块相互关联,模块 1 使用模块 2 中的控制器/服务来重新创建通用功能,从而消除代码冗余。简单地说,2 个独立的 Web 应用程序,其中 1 个应用程序的所有类作为 jar 包含在另一个应用程序中。
现在,我面临的问题是由于子模块中的常见 URL 映射,根据以下情况:
模块 1 的控制器 A 扩展模块 2 的控制器 B
package com.module1;
@RequestMapping("/client")
public class A extends B {
@RequestMapping("/hello")
public void helloWorldNew(...) {
...
}
}
package com.module2;
@RequestMapping("/user")
public class B {
@RequestMapping("/")
public void helloWorld(...) {
...
}
}
模块 1 的控制器 C 扩展模块 2 的控制器 D
package com.module1;
@RequestMapping("/client")
public class C extends D {
@RequestMapping("/helloworld")
public void helloWorldNew(...) {
...
}
}
package com.module2;
@RequestMapping("/human")
public class D {
@RequestMapping("/")
public void helloWorld(...) {
...
}
}
如您所见,将模块 2 分开来看,已映射的 URL 是/user/
&/client/
在任何意义上都是合法的。现在,当模块 1 出现时,正如预期的那样,Spring 会抛出一个异常,指出 URL/client/
已经通过A.helloWorld()
和C.helloWorld()
映射映射。
有没有解决的办法?我可以要求 Spring 简单地忽略在超类中找到的方法级 RequestMappings 吗?或者有没有办法让 Spring 忽略/覆盖映射(就像根级 RequestMappings 所做的那样)?
任何帮助将不胜感激。
谢谢,
苏米特