SpringMVC學習大綱
注解的源碼:
三、注解的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";
}
- 再次測試: