這個周末,老徐說小嚴(yán)啊,我們周六好好地干一天,周日再好好的玩一天吧。然后,都不知道干啥了,這周就過完了,昨晚才好好地接著看了下接下來的內(nèi)容。
昨晚看了一下第3.3節(jié),參數(shù)的綁定
首先,還是基于前天的那個project---SecondDay
GitHub地址:https://github.com/yanconcon/SecondDay
- @RequestParam注解:
類名:org.springframework.web.bind.annotation.RequestParam
注解類型用于將指定的請求參數(shù)賦值給方法中的形參,說人話就是把請求中的參數(shù)傳入到方法中去。
例子:
@RequestMapping(value = "/register" ,method = RequestMethod.POST)
public String register(@RequestParam("loginName") String loginName,
// 通過@RequestParam注釋拿到post中的參數(shù),然后給String賦值
@RequestParam("passWord") String passWord,
@RequestParam("userName") String userName) {
User user = new User();
user.setLoginName(loginName);
user.setPassWord(passWord);
user.setUserName(userName);
userList.add(user);
return "loginForm";
}
- @PathVariable注解:
類名:org.springframework.web.bind.annotation.PathVariable
這個方法可以非常方便地獲得請求URL中的動態(tài)參數(shù),@PathVariable注解只支持一個屬性value,類型為String,表示綁定的名稱,如果省略,則默認(rèn)表示綁定同名參數(shù)
雖然
例子:
@RequestMapping(value = "/pathVariableTest/{userId}")
public void pathVariableTest(
// 通過@PathVariable獲取鏈接上的動態(tài)參數(shù)
@PathVariable Integer userId
) {
System.out.println("rio @PathVariable get"+userId);
}
- @RequestHeader注解:
類名:org.springframework.web.bind.annotation.RequestHeader
這個方法用于將請求的頭信息區(qū)的數(shù)據(jù)映射到功能處理方法上。
例子:
@RequestMapping(value = "requestHeaderTest")
public String requestHeaderTest(
// 通過@CookieValue得到Header中的參數(shù)
@RequestHeader("User-Agent") String userAgent,
@RequestHeader("User-Agent") String[] accept
) {
System.out.println("rio @RequestHeader get "+ userAgent);
for (String a : accept){
System.out.println("rio @RequestHeader get "+ userAgent);
}
return "databindingtest";
}
- @CookieValue注解:
類名:org.springframework.web.bind.annotation.CookieValue
作用:將請求的Cookie數(shù)據(jù)映射到功能處理方法的參數(shù)上。
例子:
@RequestMapping(value = "cookieValueTest")
public String cookieValueTest(
// 通過@CookieValue得到cookie中的JSESSIONID參數(shù)
@CookieValue(value = "JSESSIONID",defaultValue = "1") String sessionId
){
System.out.println(sessionId);
return "databindingtest";
}
- @SessionAttributes注解:
類名:org.springframework.web.bind.annotation.CookieValue
作用:這個注解允許我們有選擇地指定Model中的哪些屬性轉(zhuǎn)存到HttpSession中,人話就是可以將我們指定的類存到HttpSession中。
例子:
@Controller
@SessionAttributes("user")
//把Model中的屬性名為"user"的屬性存入HttpSession中
@RequestMapping("/sessionAttributeTest")
public class SessionAttributesController {
@RequestMapping(value = "/{formName}")
public String loginForm(@PathVariable String formName){
return formName;
}
@RequestMapping(value = "/login")
public String login(
@RequestParam("loginName") String loginName,
@RequestParam("passWord") String passWord,
Model model
){
User user = new User();
user.setUserName("admin");
user.setPassWord(passWord);
user.setLoginName(loginName);
model.addAttribute("user",user);
return "welcome";
}
}
- @ModelAtttibute注解:
類名:org.springframework.web.bind.annotation.ModelAttribute
作用:將請求參數(shù)綁定到Model對象,然后通過jsp在前端獲取。
這個方法好像難一點,昨晚看到這里就有點難看得懂了,跟著做試試看吧。
這個注釋可以注釋的類型挺多的,書上寫了這5種: - 注釋返回具體類的方法
- 注釋void返回值的方法
- 注釋返回具體類的方法
- 使用@ModelAttribute和RequestMapping同時注釋一個方法
- 注釋一個方法的參數(shù)
總的來說,被@ModelAttribute注釋的類或者方法,調(diào)用之前,會先去找@ModelAttribute中的值存入model中。
這里我只做了一個例子:
@Controller
@RequestMapping("modelAttribute")
public class ModelAttributeTestController {
// 使用@ModelAttribute注釋的value屬性,來指定model屬性的名稱
@ModelAttribute("loginName")
public String userModel1(
@RequestParam("loginName") String loginName
){
return loginName;
}
@RequestMapping("/login1")
public String login1(){
return "result1";
}
}
最后附上這個項目的GitHub地址:
https://github.com/yanconcon/SecondDay.git