@RequestMapping注解的功能
@RequestMapping
注解用于将请求和处理请求的控制器方法关联起来,建立映射关系。
SpringMVC接收到指定的请求,就会来找到在映射关系中对应的控制器方法开处理这个请求。
注解位置
- 类:设置映射请求的请求路径的初始信息
- 方法:设置映射请求的请求路径的具体信息
- 类与方法:类上添加注解配合方法上注解,准确的找到处理请求的方法
注解属性
属性 | 作用 |
---|---|
value | 通过请求的请求地址匹配请求映射 |
method | 通过请求的请求方式(get或post)匹配请求映射 |
params | 通过请求的请求参数匹配请求映射 |
headers | 通过请求的请求头信息匹配请求映射 |
value
-
value
属性通过请求的请求地址匹配请求映射 -
value
属性是一个字符串类型的数组,表示该请求映射能匹配多个请求地址所对应的请求 -
value
属性必须设置,至少通过请求地址匹配请求映射
@RequestMapping(value = {"/page1", "/page2", "page3"})
public String toPage(){
return "page";
}
此时访问page1、page2、page3
都可以访问到page
页面。
method
method
属性通过请求的请求方式(get
或post
)匹配请求映射method
属性是一个RequestMethod
类型的数组,表示该请求映射能够匹配多种请求方式的请求- 若当前请求的请求地址满足请求映射的value属性,但是请求方式不满足
method
属性,则浏览器会报405错误:Request method ‘POST’ not supported
- 如果不设置
method
属性,那么无论是GET
还是POST
都可以访问。
@Controller
public class HelloController {
/*添加请求方式必须为POST请求*/
@RequestMapping(value = "/",method = RequestMethod.POST)
public String toIndex(){
/*返回视图名称,刚才配置文件会自己给他加前缀/WEB-INF/templates/和后缀.html*/
return "index";
}
@RequestMapping(value = {"/page1", "/page2", "page3"})
public String toPage(){
return "page";
}
}
-
对于处理指定请求方式的控制器方法,SpringMVC中提供了
@RequestMapping
的派生注解:- 处理
get
请求的映射 —>@GetMapping
- 处理
post
请求的映射 —>@PostMapping
- 处理
put
请求的映射 —>@PutMapping
- 处理
delete
请求的映射 —>@DeleteMapping
- 处理
-
常用的请求方式有
get、post、put、delete
但是目前浏览器只支持get
和post
,若在form表单提交的时候,为method
设置了其他请求方式(put
或delete
),则默认按照get
的请求方式处理。
若要发送put
和delete
请求,则需要通过spring提供的过滤器HiddenHttpMethodFilter
params
- params属性通过请求的请求参数匹配请求映射
- params属性是一个字符串类型的数组,可以通过四种表达式设置请求参数和请求映射的匹配关系:
"param"
:要求请求映射所匹配的请求必须携带param
请求参数"!param"
:要求请求映射所匹配的请求必须不能携带param
请求参数"param = value"
:要求请求映射所匹配的请求必须携带param
请求参数且param = value
"param != value"
:要求请求映射所匹配的请求必须携带param
请求参数但是param != value
@RequestMapping(
value = {"/page1", "page2", "page3"},
method = {RequestMethod.GET, RequestMethod.POST},
params = {"username=ZhShy","password!=123456"}
)
public String toPage(){
return "page";
}
headers
headers
属性通过请求的请求头信息匹配请求映射headers
属性是一个字符串类型的数组,可以通过四种表达式设置请求头信息和请求映射的匹配关系:"header"
:要求请求映射所匹配的请求必须携带header
请求头信息"!header"
:要求请求映射所匹配的请求必须不能携带header
请求头信息"header = value"
:要求请求映射所匹配的请求必须携带header
请求头信息且header = value
"header != value"
:要求请求映射所匹配的请求必须携带header
请求头信息且header != value
- 若当前请求满足
@RequestMapping
注解的value
和method
属性,但是不满足headers
属性,此时页面显示404错误,即资源未找到
@RequestMapping(
value = {"/page1", "page2", "page3"},
method = {RequestMethod.GET, RequestMethod.POST},
params = {"username=ZhShy","password!=123456"},
headers = {"Connection=keep-alive"}
)
public String toPage(){
return "page";
}
ant风格路径
?
:表示任意的单个字符*
:表示任意的0个或多个字符**
:表示任意的一层或多层目录
注意:在使用**
时,只能使用/**/xxx
的方式
@RequestMapping("a?a/*")
public String toDemo(){
return "demo";
}
// aba/
// aca/asdasdasdas
@RequestMapping("**/hello")
public String toDemo(){
return "demo";
}
// hello
// asd/asdasde/fsdrte/ade/hello
占位符
对于传参的方式,我们原始的做法是:
/loginusername=Keeling&password=123456
但是我们其实还有一种rest
传参的做法:
/login/Keeling/123456
SpringMVC路径中的占位符常用于restful风格中,当请求路径中将某些数据通过路径的方式传输到服务器中,就可以再对于的@RequestMapping
注解的value
属性中通过占位符 {xxx} 表示传输的数据,在通过@PathVariable
注解,将占位符所表示的数据赋值给控制器方法的形参。
- 首先在注解中使用
{xxx}
占位 - 在方法的参数中使用
@PathVariable("xxx") 类型 变量名
@RequestMapping("/demo/{username}/{password}")
public String toPath(@PathVariable("username") String username,
@PathVariable("password") String password){
System.out.println("username = "+username);
System.out.println("password = "+password);
return "demo";
}