Spring MVC的GET与POST请求url-pattern坑
一、坑现象复现
1、web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
version="2.5">
<servlet>
<servlet-name>smvc</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>smvc</servlet-name>
<url-pattern>/prefix/*</url-pattern>
<url-pattern>*.do</url-pattern>
</servlet-mapping>
</web-app>
2、Controller
@Controller
public class TestController {
@RequestMapping(value = "/test/a.do")
@ResponseBody
public String getA(){
return "AA";
}
@RequestMapping(value = "/prefix/b.do")
@ResponseBody
public String getB(){
return "BB";
}
}
3、请求情况
get/post方式请求url:/test/a.do,返回AA
get/post方式请求url:/prefix/b.do,返回错误码405
get/post方式请求url:/prefix/prefix/b.do,返回BB
二、请求不同的原因
Spring MVC的MethodHandler根据Controller的method解析生成url,而Spring MVC将请求URL在URL拦截解析过程中除去web.xml映射的前缀,剩下url串进行MethodHandler匹配,所以get/post请求无法在前缀模式url匹配到MethodHandler进行访问。