1、@RequestMapping映射请求注解、可标注的位置
@RequestMapping 概念
1)SpringMVC 使用@RequestMapping 注解为控制器指定可以处理哪些 URL 请求
2)在控制器的类定义及方法定义处都可标注 @RequestMapping
标记在类上:提供初步的请求映射信息。相对于 WEB 应用的根目录
标记在方法上:提供进一步的细分映射信息。相对于标记在类上的 URL。
若类上未标注 @RequestMapping,则方法处标记的 URL 相对于 WEB 应用的根目
录
3) 作用:DispatcherServlet 截获请求后,就通过控制器上 @RequestMapping 提供的映射信息确定请求所对应的处理方法。
2、@RequestMapping映射请求方式
标准的 HTTP 请求报头
RequestMapping映射请求参数&请求头(RequestMapping属性)
value(重点)最常用,指定URL映射请求
method:限定请求方式
HTTP协议中的所有请求方式:
【GET】、【POST】、HEAD、PUT、PATCH、DELETE、OPTIONS、TRACE
method=RequestMethod.POST:只接受POST类型的请求;
若不是固定的方式而报错:4××(客户端错误)
@RequestMapping("/haha")
@Controller
public class FirstController {
//代表当前项目下开始,处理当前项目下的hello请求
@RequestMapping("/handle",method=RequestMethod.POST)
public String firstController() {
System.out.println("收到请求,正在处理。");
return "success";
}
}
<a href="haha/handle">handle</a><br/>
<form action="haha/handle" method="post">
<input type="submit"/>
params:设定规定请求参数
params与headers支持的简单表达式
-
param1: 表示请求必须包含名为 param1 的请求参数
eg:params={“username”}
发送请求的时候必须带上一个名为username的参数,若没带都会出现404
如:http://localhost:8080/springmvc/haha/handle?username=111 -
!param1: 表示请求不能包含名为 param1 的请求参数
eg:params={"!username"}
发送请求的时候必须不携带一个名为username的参数,若带了都会出现404
如:http://localhost:8080/springmvc/haha/handle -
param1 != value1: 表示请求包含名为 param1 的请求参数,但其值不能为 value1
eg:params={“username!=123”}
发送请求时,携带的username值必须不为123;不带username或username值不为123均会报错 -
{“param1=value1”, “param2”}: 请求必须包含名为 param1 和 param2 的两个请求
eg:params={“username!=123”,“abc”,“def”}
请求参数必须满足以下规则:
请求的username不能为123,且必须有abc的值,不能有def
如:http://localhost:8080/springmvc/haha/handle?username=236&abc=1
@RequestMapping("/haha")
@Controller
public class FirstController {
//代表当前项目下开始,处理当前项目下的hello请求
@RequestMapping("/handle",method=RequestMethod.POST)
public String firstController() {
System.out.println("收到请求,正在处理。");
return "success";
}
}
<a href="haha/handle02">handle02</a><br/>
headers:规定请求头,与params一样,能写简单的表达式
如:user-Agent:浏览器信息,通过设定浏览器信息,使得该请求在指定浏览器才能使用
consumes:只接受内容类型是那种请求,规定请求头中的Content-Type
produces:告诉浏览器返回的内容类型是什么,给响应头中加上Content-Type
4、@RequestMapping支持Ant路径风格
Ant
1)Ant 风格资源地址支持 3 种匹配符:【了解】精确优先
- ?:匹配文件名中的一个字符,只能替代任意一个字符
- *:匹配文件名中的任意字符,能替代任意多个字符、一层路径
- **:** 匹配多层路径
2)@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
//Ant 风格资源地址支持 3 种匹配符
//@RequestMapping(value="/testAntPath/*/abc")
//@RequestMapping(value="/testAntPath/**/abc")
@RequestMapping(value="/testAntPath/abc??" )
public String testAntPath(){
System.out.println("testAntPath..."); return "success";
}
<!-- Ant 风格资源地址支持 3 种匹配符 -->
<a href="springmvc/testAntPath/*/abc">testAntPath</a>
<a href="springmvc/testAntPath/xxx/yyy/abc">testAntPath</a>
<a href="springmvc/testAntPath/abcxx">testAntPath</a>
5、@RequestMapping映射请求占位符PathVariable
@PathVariable
带占位符的 URL 是 Spring3.0 新增的功能,该功能在 SpringMVC 向 REST 目标挺进发展过程中具有里程碑的意义
通过 @PathVariable 可以将 URL 中占位符参数绑定到控制器处理方法的入参中:
URL 中的 {xxx} 占位符可以通过 @PathVariable(“xxx”) 绑定到操作方法的入参中。
//@PathVariable 注解可以将请求 URL 路径中的请求参数,传递到处理请求方法的入参中
//路径上的占位符只能占一层路径
//@RequestMapping(value="/{testPathVariable}/{id}"):占两层路径,且可以获得两层路径的参数
@RequestMapping(value="/testPathVariable/{id}")
public String testPathVariable(@PathVariable("id") Integer id){ System.out.println("testPathVariable...id="+id);
return "success";
}
<!-- 测试 @PathVariable -->
<a href="springmvc/testPathVariable/1">testPathVariable</a>