@RequestMapping请求映射的作用就是将浏览器所发送的请求和
处理请求的控制器方法关联起来,建立映射关系。
SpringMVC 接收到指定的请求,就会来找到在映射关系中对应的
控制器方法来处理这个请求。
@RequestMapping标识的位置
标记在类上:设置当前请求映射的基础信息,当前所匹配的请求路径
应该访问的是/test/hello,才能匹配到请求映射出来的方法。
标记在方法上:设置请求映射的具体信息。
index.html
<h1>index.html</h1>
<a th:href="@{/hello}">测试@RequestMapping所标识的位置</a>
controller
@RequestMapping("/test")
public class TestRequestMappingController {
@RequestMapping("/hello")
public String hello(){
return "success";
}
success.html
<h1>success.html</h1>
@RequestMapping的value属性
@RequestMapping注解的value属性通过请求的请求地址匹配请求映射
@RequestMapping注解的value属性是一个字符串类型的数组,
即当前浏览器所发送的请求路径匹配value属性中的任何一个值,
则当前请求就会被注解所标识的方法进行处理。
@RequestMapping注解的value属性必须设置,至少通过请求地址匹配请求映射。
//例
@RequestMapping({"/hello","/a"})
@RquestMapping的method属性
@RequestMapping注解的method属性通过请求方式(get或post)匹配请求映射。
@RequestMapping注解的method属性是一个RequestMethod类型的数组,
该请求映射能够匹配多种请求方式。
@RequestMapping(value = "/hello",method ={ RequestMethod.GET,RequestMethod.POST})
若请求地址满足请求映射的value属性,但浏览器发送的请求方式不满足method属性, 则浏览器报错405:Request method 'POST' not supported。
@RequestMapping的params属性(不常用)
作用:通过请求参数匹配请求,即浏览器发送的
请求参数必须满足params属性的设置。
params可以使用四种表达式:
"param":要求所匹配请求的请求参数中必须携带param参数
"!param" :要求所匹配请求的请求参数中不能携带param参数
param="value":要求所匹配请求的请求参数中必须携带param参数,
且必须为value。
param!="value":匹配请求的请求参数中必须可以不携带param参数,
若携带值一定不能是value。
index.html (浏览器端就演示第一种表达式)
<h1>index.html</h1>
<!--第一种方式拼接:get请求会把请求参数拼接到请求地址中,可以手动拼接-->
<a th:href="@{/test/hello?username=admin}">测试@RequestMapping的params属性</a><br>
<!--第二种方式拼接-->
<a th:href="@{/test/hello(username='admin')}">测试@RequestMapping的params属性</a><br>
controller层
@RequestMapping(value = "/hello",
method ={ RequestMethod.GET,RequestMethod.POST},
params = {"username","!password","age=18","gender!=女"}
)
SpringMVC支持ant风格的路径
? :表示任意的单个字符
(任意字符中不能写?号,在路径中问号前面是路径,后面是请求参数)。
* :表示任意的0个或多个字符
**:表示任意层数的任意目录
注意:使用**时,只能/**/xxx的方式,**前后都不能有字符
(/表示路径的分隔符,路径里面不能写/)
<a th:href="@{/test/aac/ant}">测试@RequestMapping的ant风格路径</a><br>
@RequestMapping("/a?c/ant")
public String testAnt(){
return "success";
}
SpringMVC支持路径中的占位符
原始方式:/deleteUser?id=1
rest方式:/user/delete/1
- 即匹配到当前映射,也要在控制器方法中获取传过来的请求参数,
以前传过来的是键和值,现在只有值,所以用一个占位符。
- 把当前向服务器传输过来的数据,作为路径的一部分,传过来没有键只有value值,
可以借助 @PathVariable 注解的value属性设置路径中,使用{xxxx}的方式
表示路径中的数据,将通过占位符表示的值和控制器方法的形参进行绑定。
html
<!-- 把数据当作路径一部分传到服务器 -->
<a th:href="@{/test/rest/1}">测试@RequestMapping的value属性中的占位符</a><br>
<a th:href="@{/test/rest/1/admin}">测试@RequestMapping的value属性中的占位符</a><br>
controller
// @RequestMapping("/rest/{id}")
@RequestMapping("/rest/{id}/{username}")
// public String testRest(@PathVariable("id") Integer id){
public String testRest(@PathVariable("id") Integer id,@PathVariable("username") String uname){
System.out.println("id:"+id+"uname:"+uname);
return "success";
}