在springmvc中,許多註解能夠幫助我們大大提高開發效率,這裏小編講述一下最常見的七種註解
七種常用註解:
1. RequestParam註解
- 作用:把請求中的指定名稱的參數傳遞給控制器中的形參賦值
- 屬性
- value:請求參數中的名稱
- required:請求參數中是否必須提供此參數,默認值是true,必須提供
概念引導:
/* 接收請求 @return */
@RequestMapping(path="/testParam")
public String testParam(@RequestParam(value="username",required=false)String name) {
System.out.println(name);
return "success";
}
注意:傳值要與註解中的參數對應,否則將不會被自動封裝上,則會變成null值,2.當添加了註解required=false,如果不參入參數也不會拋出400請求錯誤,如果不添加,默認需要傳入參數,否則會報400錯誤
2. RequestBody註解
- 作用:用於獲取請求體的內容(注意:get方法不可以)
- 屬性
required:是否必須有請求體,默認值是true
2.1 引導案例:
@RequestMapping(value = "/testBody")
public String testBody(@RequestBody String body){
System.out.println("testBody Method ... ");
System.out.println(body);
return "success";
}
2.2 表單內容如下:
<form action="/test/testBody" method="post">
姓名:<input type="text" name="username" />
密碼:<input type="text" name="password" />
金額:<input type="text" name="money" />
<input type="submit" value="提交" />
</form>
2.3 提交頁面:
輸出結果:
testBody Method …
username=%C3%A7%C2%BD%C2%97%C3%A4%C2%B8%C2%BD%C3%A4%C2%B8%C2%9D%C3%A5%C2%A1%C2%94&password=1024&money=200.5
2.4 注意:解決亂碼的問題:在web.xml中配置
<!-- 配置過濾器 -->
<filter>
<filter-name>characterEncodingFilter</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>characterEncodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
deploy服務器,輸出結果:
testBody Method …
username=羅麗絲塔&password=1024&money=200.5
3. PathVariable註解
- 作用:擁有綁定url中的佔位符的。例如:url中有/delete/{id},{id}就是佔位符
- 屬性
- value:指定url中的佔位符名稱
- Restful風格的URL
- 請求路徑一樣,可以根據不同的請求方式去執行後臺的不同方法
- restful風格的URL優點
- 結構清晰
- 符合標準
- 易於理解
- 擴展方便
3.1 引導案例:
@RequestMapping("/testVaripoty/{id}")
public String testVaripoty(@PathVariable(name = "id") String id){
System.out.println("testVaripoty Method ... ");
System.out.println(id);
return "success";
}
3.2 傳值測試:
<a href="testVaripoty/100">測試PathVariable</a>
3.3 結果輸出:
testVaripoty Method ...
100
這裏注意:這裏的寫法格式是/路徑/{參數名},在傳值的時候也是“路徑/值”,在傳參數的時候不要習慣性的把 ‘ / ’ 寫成 ’?‘
4. RequestHeader註解
- 作用:獲取指定請求頭的值
- 屬性
value:請求頭的名稱
4.1 引導案例:
@RequestMapping(path="/testHeader")
public String testHeader(@RequestHeader(value="Accept") String header) {
System.out.println(header);
return "success";
}
5. CookieValue註解
- 作用:用於獲取指定cookie的名稱的值
- 屬性
value:cookie的名稱
5.1 引導案例:
@RequestMapping(path="/testCookie")
public String testCookie(@CookieValue(value="JSESSIONID") String cookieValue) {
System.out.println(cookieValue);
return "success";
}
5.2 注意:JSESSIONID是固定寫法,在瀏覽器中可以看到的,這裏寫錯了也是獲取不到的
6. ModelAttribute註解
- 作用
- 出現在方法上:表示當前方法會在控制器方法執行前線執行。
- 出現在參數上:獲取指定的數據給參數賦值。
- 兩種實現方式:@ModelAttribute中設置返回對象 ; 使用map集合 + @ModelAttribute ( value = key) 的形式 完成
6.1 引導案例:(返回對象方式)
@ModelAttribute
public UserAccount firModol(String username){
System.out.println("welcome ..." + username);
//模擬查詢數據庫操作
UserAccount userAccount = new UserAccount();
userAccount.setUsername(username);
userAccount.setPassword("1234465");
return userAccount;
}
@RequestMapping("/testModolAttribute")
public String testModolAttribute(UserAccount userAccount){
System.out.println(userAccount);
return "success";
}
6.2 表單填寫:
輸出結果:
welcome …羅麗絲塔
UserAccount{username=‘羅麗絲塔’, password=‘33333’, money=null}
這裏小編對爲什麼密碼是33333做一個解釋,@ModelAttribute表示最先被執行,小編在裏面設置了密碼,模擬查詢數據庫,但是此時小編提交的新的數據過來,於是將原來的數據覆蓋了,就變成了表格中填寫的數據,有點類似於修改個人資料的操作
6.3 引導案例(MAP+@ModelAttribute)
@ModelAttribute
public void firModol(String username , Map<String , UserAccount> map){
System.out.println("welcome ..." + username);
UserAccount userAccount = new UserAccount();
userAccount.setUsername(username);
userAccount.setPassword("1234465");
map.put("userAccounts",userAccount);
}
@RequestMapping("/testModolAttribute")
public String testModolAttribute(@ModelAttribute(value = "userAccounts") UserAccount userAccount){
System.out.println(userAccount);
return "success";
}
6.4 form表單填寫:
6.5 輸出結果:
welcome ...奧尼斯汀
UserAccount{username='奧尼斯汀', password='1024', money=null}
7. SessionAttributes註解
- 作用:用於多次執行控制器方法間的參數共享
- 屬性
value:指定存入屬性的名稱
7.1 引導案例:創建TestSessionAttributes類
@Controller
@SessionAttributes(value = "msg")//將msg存入Session域中
public class TestSessionAttributes {
@RequestMapping("/setSessionAttribute")
//Model底層實現就是存入request域中
public String setSessionAttribute(Model model){
System.out.println("setSessionAttribute ...");
model.addAttribute("msg","美美");
return "success";
}
}
7.2 獲取session
@RequestMapping("/getSessionAttribute")
public String getSessionAttribute(ModelMap modelmap){
System.out.println("getSessionAttribute ...");
String msg = (String) modelmap.get("msg");
System.out.println("msg : " + msg);
return "success";
}
7.3 刪除Session域
@RequestMapping("/delSessionAttribute")
public String delSessionAttribute(SessionStatus sessionStatus){
System.out.println("delSessionAttribute ...");
sessionStatus.setComplete();
return "success";
}
7.4 jsp頁面編寫
<a href="setSessionAttribute">setSessionAttribute</a>
<a href="getSessionAttribute">getSessionAttribute</a>
<a href="delSessionAttribute">delSessionAttribute</a>
7.5 success界面編寫(注意不要忽略isELIgnored=false)
<%@ page contentType="text/html;charset=UTF-8" language="java" isELIgnored="false" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<h1>Success</h1>
${msg}
${sessionScope}
</body>
</html>
7.6 頁面測試
7.6.1 點擊setSessionAttribute
7.6.2 點擊getSessionAttribute
7.6.3 點擊delSessionAttribute
這裏還有個美美是因爲request域中沒有被清除,但是session域中已經被清楚了
這裏就是常用的七大註解了,如有講錯的地方歡迎大家指正