我们有两个Spring控制器存在干扰的问题。其中一个控制器通过通配符前缀匹配URL后缀,另一个控制器则通过URL前缀匹配。我期望URL从左到右被读取,但事实似乎并非如此。
请考虑以下代码(已编辑):
问题在于,如果调用URL“/some/path/abcdefg”,则控制器1会启动。但我想要的是控制器3。
不幸的是,其他控制器的行为与此不同!
如果调用URL“/some/path/xyz”,则控制器3会启动。这种行为对于控制器是可重现的。它总是表现相同,并且控制器不会随机选择。
Spring文档以及其他用户的问题都指向了这样一个想法,即采取与给定模式匹配的“第一个”控制器。然而,这对我来说并不太合理,因为控制器1和2具有非常相似的请求映射,但控制器的匹配却不同!
所有内容都由调度程序servlet处理。
是否有人能提示可能发生了什么?
请考虑以下代码(已编辑):
@RequestMapping(value = "/**/abcdefg")
public class Controller1 {...}
@RequestMapping(value = "/**/xyz")
public class Controller2 {...}
@RequestMapping(value = "/some/{path}")
public class Controller3
{
@RequestMapping(value = "/{page}", method = RequestMethod.GET)
public String page(@PathVariable("page") final String page, final Model model)
{ //do sth }
}
问题在于,如果调用URL“/some/path/abcdefg”,则控制器1会启动。但我想要的是控制器3。
不幸的是,其他控制器的行为与此不同!
如果调用URL“/some/path/xyz”,则控制器3会启动。这种行为对于控制器是可重现的。它总是表现相同,并且控制器不会随机选择。
Spring文档以及其他用户的问题都指向了这样一个想法,即采取与给定模式匹配的“第一个”控制器。然而,这对我来说并不太合理,因为控制器1和2具有非常相似的请求映射,但控制器的匹配却不同!
所有内容都由调度程序servlet处理。
是否有人能提示可能发生了什么?
/some/path
的控制器将无法处理/some/path/xyz
。请向我们展示您真正的映射。 - Sotirios Delimanolis