1.@RequestParam
作用:把請求中的指定名稱的參數傳遞給控制器中的形參賦值
屬性:
- value:請求參數中的名稱
- required:請求參數中是否必須提供此參數,默認值是true,必須提供
<a href="anno/testRequestParam?username=zhangsan">@RequestParam</a>
@Controller
@RequestMapping("/anno")
public class AnnoController {
@RequestMapping("/testRequestParam")
public String testRequestParam(@RequestParam("username") String name) {
System.out.println("執行了");
System.out.println(name);
return "success";
}
}
顯示結果
執行了
zhangsan
2. @RequestBody
作用:用於獲取請求體的內容(不支持get請求)
屬性:
- required:是否必須有請求體,默認值是true
<form action="anno/testRequestBody" method="post">
<table>
<tr>
<td>用戶名:</td>
<td><input type="text" name="uName"></td>
</tr>
<tr>
<td>年齡:</td>
<td><input type="text" name="uAge"></td>
</tr>
<tr>
<td colspan="2"><input type="submit" value="保存"></td>
</tr>
</table>
</form>
@RequestMapping("/testRequestBody")
public String testRequestBody(@RequestBody String body) {
System.out.println("執行了");
System.out.println(body);
return "success";
}
顯示結果
執行了
uName=zs&uAge=18
3.@PathVariable
作用:綁定url中的佔位符
屬性:
- value:指定url中的佔位符名稱
Restful風格的URL
請求路徑一樣,可以根據不同的請求方式去執行後臺的不同方法
restful風格的URL優點
- 結構清晰
- 符合標準
- 易於理解
- 擴展方便
<a href="anno/testPathVariable/100">@PathVariable</a>
@RequestMapping("/testPathVariable/{id}")
public String testPathVariable(@PathVariable("id") String id) {
System.out.println("執行了");
System.out.println(id);
return "success";
}
顯示結果
執行了
100
4. @RequestHeader
作用:獲取指定請求頭的值
屬性:
- value:請求頭的名稱
<a href="anno/testRequestHeader">@RequestHeader</a>
@RequestMapping("/testRequestHeader")
public String testRequestHeader(@RequestHeader(value = "Accept") String header) {
System.out.println("執行了");
System.out.println(header);
return "success";
}
顯示結果
執行了
text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
5.@CookieValue
作用:用於獲取指定cookie的名稱的值
屬性
- value:cookie的名稱
<a href="anno/testCookieValue">@CookieValue</a>
@RequestMapping("/testCookieValue")
public String testCookieValue(@CookieValue(value = "JSESSIONID") String cookie) {
System.out.println("執行了");
System.out.println(cookie);
return "success";
}
顯示結果
執行了
00B30279E30ED89F28819B23DA74C5AB
6.@ModelAttribute
作用:
- 出現在方法上:表示當前方法會在控制器方法執行前線執行
- 出現在參數上:獲取指定的數據給參數賦值
應用場景:
- 當提交表單數據不是完整的實體數據時,保證沒有提交的字段使用數據庫原來的數據
public class User implements Serializable {
private String uName;
private Integer uAge;
private Date birthday;
}
<form action="anno/testModelAttribute" method="post">
<table>
<tr>
<td>用戶名:</td>
<td><input type="text" name="uName"></td>
</tr>
<tr>
<td>年齡:</td>
<td><input type="text" name="uAge"></td>
</tr>
<tr>
<td colspan="2"><input type="submit" value="保存"></td>
</tr>
</table>
</form>
@RequestMapping("/testModelAttribute")
public String testModelAttribute(User user) {
System.out.println("執行了");
System.out.println(user);
return "success";
}
//有返回值
@ModelAttribute
public User complementUser(String uName){
//當提交表單數據不是完整的實體數據時,保證沒有提交的字段使用數據庫原來的數據
//模擬根據uName從數據庫查詢出的User
User user = new User();
user.setuName(uName);
user.setuAge(30);
user.setBirthday(new Date());
return user;
}
顯示結果
執行了
User{uName='張三', uAge='12', birthday=Tue Aug 06 15:36:35 CST 2019}
@RequestMapping("/testModelAttribute")
public String testModelAttribute(@ModelAttribute(value = "用戶001") User user) {
System.out.println("執行了");
System.out.println(user);
return "success";
}
//無返回值
@ModelAttribute
public void complementUser(String uName, Map<String, User> map) {
//當提交表單數據不是完整的實體數據時,保證沒有提交的字段使用數據庫原來的數據
//模擬根據uName從數據庫查詢出的User
User user = new User();
user.setuName(uName);
user.setuAge(30);
user.setBirthday(new Date());
map.put("用戶001", user);
}
顯示結果
執行了
User{uName='張三', uAge='15', birthday=Tue Aug 06 15:46:06 CST 2019}
7.@SessionAttributes
作用:用於多次執行控制器方法間的參數共享
屬性:
- value:指定存入屬性的名稱
@SessionAttributes(value = {"message"})//該註解只能作用於類上
public class AnnoController {}
@RequestMapping("/testSessionAttributes")
public String testSessionAttributes(Model model) {
System.out.println("執行了");
model.addAttribute("message", "張三");
return "success";
}
@RequestMapping("/getSessionAttributes")
public String getSessionAttributes(ModelMap modelMap) {
System.out.println("執行了");
String message = (String) modelMap.get("message");
System.out.println(message);
return "success";
}
@RequestMapping("/deleteSessionAttributes")
public String deleteSessionAttributes(SessionStatus status) {
System.out.println("執行了");
status.setComplete();
return "success";
}
<a href="anno/testSessionAttributes">@SessionAttributes</a>
<a href="anno/getSessionAttributes">getSessionAttributes</a>
<a href="anno/deleteSessionAttributes">deleteSessionAttributes</a>