我对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";
}
}
Spring 有意这样做;当方法和类型级别的请求映射模式值匹配时,它仅使用其中一个。@See org.springframework.util.AntPathMatcher#combine()
一种方法是在方法级别将"/"后缀为 RequestMapping 值(如下所示),这样您就可以使用 "/test/test/"
作为 url(当然,不是/test/test
)。
@Controller
@RequestMapping(value = "/test")
public class Test {
@RequestMapping(value = "/test/", method = RequestMethod.GET)
String test() {
return "test";
}
}
不知道为什么没有记录下来。
因此,我认为匹配"/test/test"
url的唯一剩余方法是使用URI模板模式。
@Controller
@RequestMapping(value = "/test")
public class Test {
@RequestMapping(value = "/{anythinghere}", method = RequestMethod.GET)
String test() {
return "test";
}
}