这个周末,老徐说小严啊,我们周六好好地干一天,周日再好好的玩一天吧。然后,都不知道干啥了,这周就过完了,昨晚才好好地接着看了下接下来的内容。
昨晚看了一下第3.3节,参数的绑定
首先,还是基于前天的那个project---SecondDay
GitHub地址:https://github.com/yanconcon/SecondDay
- @RequestParam注解:
类名:org.springframework.web.bind.annotation.RequestParam
注解类型用于将指定的请求参数赋值给方法中的形参,说人话就是把请求中的参数传入到方法中去。
例子:
@RequestMapping(value = "/register" ,method = RequestMethod.POST)
public String register(@RequestParam("loginName") String loginName,
// 通过@RequestParam注释拿到post中的参数,然后给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中的动态参数,@PathVariable注解只支持一个属性value,类型为String,表示绑定的名称,如果省略,则默认表示绑定同名参数
虽然
例子:
@RequestMapping(value = "/pathVariableTest/{userId}")
public void pathVariableTest(
// 通过@PathVariable获取链接上的动态参数
@PathVariable Integer userId
) {
System.out.println("rio @PathVariable get"+userId);
}
- @RequestHeader注解:
类名:org.springframework.web.bind.annotation.RequestHeader
这个方法用于将请求的头信息区的数据映射到功能处理方法上。
例子:
@RequestMapping(value = "requestHeaderTest")
public String requestHeaderTest(
// 通过@CookieValue得到Header中的参数
@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数据映射到功能处理方法的参数上。
例子:
@RequestMapping(value = "cookieValueTest")
public String cookieValueTest(
// 通过@CookieValue得到cookie中的JSESSIONID参数
@CookieValue(value = "JSESSIONID",defaultValue = "1") String sessionId
){
System.out.println(sessionId);
return "databindingtest";
}
- @SessionAttributes注解:
类名:org.springframework.web.bind.annotation.CookieValue
作用:这个注解允许我们有选择地指定Model中的哪些属性转存到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
作用:将请求参数绑定到Model对象,然后通过jsp在前端获取。
这个方法好像难一点,昨晚看到这里就有点难看得懂了,跟着做试试看吧。
这个注释可以注释的类型挺多的,书上写了这5种: - 注释返回具体类的方法
- 注释void返回值的方法
- 注释返回具体类的方法
- 使用@ModelAttribute和RequestMapping同时注释一个方法
- 注释一个方法的参数
总的来说,被@ModelAttribute注释的类或者方法,调用之前,会先去找@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