注解的源码:
三、注解的params属性
3.1.params属性的理解:
- params属性用来通过设置请求参数来映射请求。对于RequestMapping注解来说:
- params属性也是一个数组,不过要求请求参数必须和params数组中要求的所有参数完全一致后,才能映射成功
- params属性也是一个数组,不过要求请求参数必须和params数组中要求的所有参数完全一致后,才能映射成功
3.2.params属性的4种用法:
a.参数说明:
- @RequestMapping(value=“/login”, params={“username”, “password”}) 表示:
- 请求参数中必须包含 username 和 password,才能与当前标注的方法进行映射
- @RequestMapping(value=“/login”, params={“!username”, “password”}) 表示:
- 请求参数中不能包含username参数,但必须包含password参数,才能与当前标注的方法进行映射
- @RequestMapping(value=“/login”, params={“username=admin”, “password”}) 表示:
- 请求参数中必须包含username参数,并且参数的值必须是admin,另外也必须包含password参数,才能与当前标注的方法进行映射
- @RequestMapping(value=“/login”, params={“username!=admin”, “password”}) 表示:
- 请求参数中必须包含username参数,但参数的值不能是admin,另外也必须包含password参数,才能与当前标注的方法进行映射
注意:如果前端提交的参数,和后端要求的请求参数不一致,则出现400错误!!!
- 请求参数中必须包含username参数,但参数的值不能是admin,另外也必须包含password参数,才能与当前标注的方法进行映射
b.返回值状态码:
- HTTP状态码400的原因:请求参数格式不正确而导致的
3.3.测试params属性:
a.添加接口方法:
- 在 RequestMappingTestController 类中添加如下方法:
@RequestMapping(value="/testParams", params = {"username", "password"})
public String testParams(){
return "testParams";
}
- 2.提供视图页面:
<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<title>testParams</title>
</head>
<body>
<h1>测试RequestMapping注解的Params属性</h1>
</body>
</html>
b.添加超链接:
- 在index.html文件中添加超链接:
<!--测试RequestMapping的params属性-->
<a th:href="@{/testParams(username='admin',password='123')}">测试params属性</a>
- 当然,你也可以这样写:这样写IDEA会报错,但不影响使用
<a th:href="@{/testParams?username=admin&password=123}">测试params属性</a><br>
c.发送请求时,传递username参数:
d.发送请求时,没有传递username参数:
<a th:href="@{/testParams(password='123')}">测试params属性</a><br>
- 启动服务器,测试:
- 提示无效的请求参数,服务器无法或不会处理当前请求
四、注解的headers属性
4.1.认识headers属性:
a.属性理解:
- headers和params原理相同,用法也相同
- 当前端提交的请求头信息和后端要求的请求头信息一致时,才能映射成功
b.请求头信息怎么查看?
- 在chrome浏览器中,F12打开控制台,找到Network,可以查看具体的请求协议和响应协议,在请求协议中可以看到请求头信息,例如:
- 请求头信息和请求参数信息一样,都是键值对形式,例如上图中:
- Referer: http://localhost:8080/springmvc/ 键是Referer,值是http://localhost:8080/springmvc/
- Host: localhost:8080 键是Host,值是localhost:8080
4.2.headers属性的4种用法:
- @RequestMapping(value=“/login”, headers={“Referer”, “Host”}) 表示:
请求头信息中必须包含Referer和Host,才能与当前标注的方法进行映射
- @RequestMapping(value=“/login”, headers={“Referer”, “!Host”}) 表示:
请求头信息中必须包含Referer,但不包含Host,才能与当前标注的方法进行映射
- @RequestMapping(value=“/login”, headers={“Referer=http://localhost:8080/springmvc/”, “Host”}) 表示:
- 请求头信息中必须包含Referer和Host,并且Referer的值必须是http://localhost:8080/springmvc/,才能与当前标注的方法进行映射。
- @RequestMapping(value=“/login”, headers={“Referer!=http://localhost:8080/springmvc/”, “Host”}) 表示:
- 请求头信息中必须包含Referer和Host,并且Referer的值不是http://localhost:8080/springmvc/,才能与当前标注的方法进行映射。
- 注意:如果前端提交的请求头信息,和后端要求的请求头信息不一致,则出现404错误!!!
4.3.测试headers属性:
a.定义接口:
- 在 RequestMappingTestController 类中添加以下方法:
@RequestMapping(value="/testHeaders", headers = {"Referer=http://localhost:8080/springmvc/"})
public String testHeaders(){
return "testHeaders";
}
b.编写页面:
- 提供视图页面:
<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<title>test Headers</title>
</head>
<body>
<h1>测试RequestMapping注解的headers属性</h1>
</body>
</html>
c.超链接:
- 在index.html页面中添加超链接:
<!--测试RequestMapping的headers属性-->
<a th:href="@{/testHeaders}">测试headers属性</a><br>
d.测试:
- 启动服务器,测试结果:
- 将后端控制器中的headers属性值进行修改:
@RequestMapping(value="/testHeaders", headers = {"Referer=http://localhost:8888/springmvc/"})
public String testHeaders(){
return "testHeaders";
}
- 再次测试: