我对Spring @RequestMapping
注释的行为感到困惑。在以下代码中,test()
映射到"/test"
,test_test()
映射到"/test/test/test"
。这里发生了什么?如果我想将test()
映射到"/test/test"
,我该怎么办?
package com.mvc.spring;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
@Controller
@RequestMapping(value = "/test")
public class Test {
@RequestMapping(value = "/test", method = RequestMethod.GET)
String test() {
return "test";
}
@RequestMapping(value = "/test/test", method = RequestMethod.GET)
String test_test() {
return "test";
}
}
答案 0 :(得分:1)
Spring故意这样做;当方法和类型级别的请求映射模式值匹配时,它仅使用其中一个。 @See org.springframework.util.AntPathMatcher#combine()
一种方法是在方法级别(如下所示)为RequestMapping值后缀“/”,这样您就可以使用"/test/test/"
作为网址( NOT /test/test
,当然)。
@Controller
@RequestMapping(value = "/test")
public class Test {
@RequestMapping(value = "/test/", method = RequestMethod.GET)
String test() {
return "test";
}
}
不知道为什么没有记录。
因此,我认为匹配"/test/test"
网址的唯一剩余方法是使用URI模板模式。
@Controller
@RequestMapping(value = "/test")
public class Test {
@RequestMapping(value = "/{anythinghere}", method = RequestMethod.GET)
String test() {
return "test";
}
}