Spring MVC - 02 RequestMapping映射请求
Posted 安得广厦千万间
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Spring MVC - 02 RequestMapping映射请求相关的知识,希望对你有一定的参考价值。
使用 @RequestMapping 映射请求
1.SpringMVC 使用@RequestMapping 注解为 控制器 指定可以处理哪些URL 请求
2. 在控制器的 类定义 及 方法定义处 都可以标注@RequestMapping
类定义处: 提供初步的请求映射信息。 相对于 WEB 应用的根目录
方法处: 提供进一步的细分映射信息。相对于类定义处的URL。若类定义处未标注 @RequestMapping,则方法
处标记的URL 相对于WEB 应用的根目录
3.DispatcherServlet截取请求后,就通过控制器上@RequestMapping 提供的映射信息确定请求所对应的处理方法。
@Controller public class SpringMVCTest { public static final String SUCCESS = "success"; @RequestMapping("/testRequestMapping") public String testRequestMapping(){ System.out.println("testRequestMapping"); return SUCCESS; } }
<a href="testRequestMapping">Test RequestMapping</a>
http://localhost:8080/testRequestMapping
@Controller @RequestMapping("springmvc") public class SpringMVCTest { public static final String SUCCESS = "success"; @RequestMapping("/testRequestMapping") public String testRequestMapping(){ System.out.println("testRequestMapping"); return SUCCESS; } }
<a href="springmvc/testRequestMapping">Test RequestMapping</a>
http://localhost:8080/springmvc/testRequestMapping
映射请求参数、请求方法或请求头
@RequestMapping 除了可以使用 请求URL 映射请求 外,还可以使用 请求方法、请求参数 及 请求头映射请求
@ RequestMapping 的 value、method、params及 headers 分别表示 请求 URL、 请求方法、请求参数及请求头的映射条件,它们之间是与的关系。联合使用多个条件可让请求映射更加精确化。
params 和 headers 支持简单的表达式:
- param1:表示请求必须包含名为 param1的请求参数
- !param1:表示请求不能包含名为 param1的请求参数
- param1!=value1:表示请求包含名为 param1的请求参数,但其值不能为 value1
- {“param1=value1”,”param2”}:表示请求必须包含名为 param1 和 param2的两个请求参数,且param1参数的值必须为 value1
/** * 使用 method 属性来指定请求方式 * @return */ @RequestMapping(value = "/testMethod", method = RequestMethod.POST) public String testMethod(){ System.out.println("testMethod"); return SUCCESS; }
<a href="springmvc/testMethod">Test Method</a><br/>
<form action="springmvc/testMethod" method="POST">
<input type="submit" value="submit"/>
</form>
@RequestMapping(value = "/testParamsAndHeaders", params = {"username", "age!=10"}) public String testParamsAndHeaders(){ System.out.println("testParamsAndHeaders"); return SUCCESS; }
<a href="springmvc/testParamsAndHeaders?username=sun&age=10">Test ParamsAndHeaders</a><br/>
报错:
20-Oct-2018 16:39:22.796 警告 [catalina-exec-1] org.springframework.web.servlet.PageNotFound.handleNoSuchRequestHandlingMethod No matching handler method found for servlet request:
path \'/springmvc/testParamsAndHeaders\', method \'GET\', parameters map[\'username\' -> array<String>[\'sun\'], \'age\' -> array<String>[\'10\']]
修改age=11 后访问正常
设置 headers
HTTP 协议报文格式
@RequestMapping(value = "/testParamsAndHeaders", params = {"username", "age!=10"}, headers = {"Accept-Language=zh-CN,zh;q=0.9"}) public String testParamsAndHeaders(){ System.out.println("testParamsAndHeaders"); return SUCCESS; }
IE 无法访问, Chrome 可以访问
Ant 风格资源地址
Ant 风格资源地址 支持 3种匹配符:
? : 匹配文件名中的一个字符
* : 匹配文件名中的任意字符
**: ** 匹配多层路径
@RequestMapping 支持 Ant 风格的URL:
/user/*/createUser: 匹配 /user/aaa/createUser 、 /user/bbb/createUser等URL
/user/**/createUser: 匹配 /user/createUser 、 /user/aaa/bbb/createUser等URL
/user/createUser??: 匹配 /user/createUserAA 、 /user/createUserBB等URL
@RequestMapping("/testAntPath/*/abc") public String testAntPath(){ System.out.println("testAntPath"); return SUCCESS;
}
<a href="/springmvc/testAntPath/mmm/abc">Test AntPath</a><br/><br/>
@ PathVariable 映射 URL 绑定的占位符
带占位符的 URL 是 Spring 3.0 新增的功能,该功能在SpringMVC 向 REST 目标挺进发展过程中具有里程碑式的意义。
通过 @ PathVariable 可以将URL 中占位符 参数绑定到 控制器 处理方法的入参中:
URL 中的 {xxx} 占位符可以通过 @ PathVariable(“xxx”) 绑定到操作方法的入参中。
@RequestMapping("/testPathVariable/{id}") public String testPathVariable(@PathVariable("id") Integer id){ System.out.println("testPathVariable: " + id); return SUCCESS; }
<a href="/springmvc/testPathVariable/1">Test PathVariable</a><br/><br/>
Console: testPathVariable: 1
以上是关于Spring MVC - 02 RequestMapping映射请求的主要内容,如果未能解决你的问题,请参考以下文章