作用:把请求中指定名称的参数 赋值 给控制器中的形参
value:请求参数中的名称
required:请求参数中是否必须提供此参数,默认值:true 表示必须提供,如果不提供将报错
使用教程:
<a href="paramer?name=lisi">RequestParam注解使用</a>
@Controller
public class AnnoController {
@RequestMapping("/paramer") //请求路径
public String Paramer(@RequestParam(value="name")String username,@RequestParam(value = "age",required = false)String sex ){
System.out.println(username);
return "success";
}
}
把name 的值赋给username,把age的值赋给sex。
作用:用于获取请求体的内容,直接使用得到的是key=value&key=value...结构的数据
get请求没有请求体,所以不适用
属性:
required:是否必须有请求体,默认值是:true,当取true时,get请求方式会报错,如果取false时,get请求得到的是null
使用教程:
<h1>RequestBody注解的使用教程</h1>
<form action="rebody" method="post">
账号:<input type="text" name="username"><br />
密码:<input type="password" name="password"><br>
<input type="submit" value="提交">
</form>
<a href="rebody?test=123">RequestBody注解get请求</a>
@RequestMapping("/rebody") //请求路径
public String body(@RequestBody(required = false) String str){ //这里需要填写String类型
System.out.println(str);
return "success";
}
作用:用于绑定URL中的占位符,
属性:
value:用于指定URL中占位符的名称
required:是否必须提供占位符
使用教程:
<a href="usevariable/100">PathVariable注解使用</a>
@RequestMapping("/usevariable/{id}") //路径不能写错
public String variableTest(@PathVariable("id") Integer id){
System.out.println(id);
return "success";
}
作用:用于获取请求头 用处不大
属性:
value:提供消息头的名称
required:是否必须有此消息头
使用教程:
<a href="useHeader">RequestHeader注解的使用</a>
@RequestMapping("/useHeader")
public String useHeader(@RequestHeader(value = "Accept-language",required = false) String reHeader){
System.out.println(reHeader);
return "success";
}
作用:把指定cookie的值传入控制器方法参数
属性:
value:指定cookie参数
required:是否必须有次cookie
使用教程:
<a href="usecookie">CookieValue注解的使用</a>
@RequestMapping("/usecookie") //value的值必须为JSESSIONID,否则值为null
public String useCookie(@CookieValue(value = "JSESSIONID",required = false) String cookievalue){
System.out.println(cookievalue);
return "success";
}
作用:SpringMVC4.3后加入的,用于修饰方法和参数
作用在方法上,当前方法会在控制器方法执行之前,先执行。可以修饰没有返回值的方法,也可以修饰有具体返回值的方法
作用在参数上,获取指定的数据给参数赋值
属性:
value:用于获取数据的key,key可以是POJO的属性名称,也可以是map结构的key
基于POJO使用教程:
<a href="usemodelattribute?username=test">ModelAttribute注解的使用</a>
@RequestMapping("/usemodelattribute") //后执行
public String useModel(User user){
System.out.println("执行了useModel方法:"+user.getUsername());
return "success";
}
@ModelAttribute //先执行
public void showModel(User user){
System.out.println("执行了showModel方法的控制器:"+user.getUsername());
}
基于 Map 的使用 示例1:ModelAttribute 修饰方法带返回值
<h3>基于Map的应用场景示例:ModelAttribute修饰修饰方法带返回值</h3>
<form action="updateuser" methond="post">
用户名:<input type="text" name="username"><br>
年龄:<input type="text" name="age"><br>
<input type="submit" value="提交">
</form>
//基于Map的应用场景方式1
@ModelAttribute
public User showModel_1(String username){
//模拟去数据库查询
User abc = findUserByName(username);
System.out.println("执行了showModel_1方法:"+abc);
return abc;
}
//模拟修改用户方法
@RequestMapping("/updateuser")
public String testModelAttribute(User user){
System.out.println("控制器处理请求的方法:修改用户"+user);
return "success";
}
//模拟去数据库查询
private User findUserByName(String username){
User user = new User();
user.setUsername(username);
user.setUserage(19);
user.setPassword("123456");
return user;
}
基于 Map 的示例 2 :ModelAttribute** 修饰方法不带返回值
<h3>基于Map的应用场景示例:ModelAttribute修饰修饰方法不带返回值</h3>
<form action="updateUser" methond="post">
用户名:<input type="text" name="username"><br>
年龄:<input type="text" name="age"><br>
<input type="submit" value="提交">
</form>
//基于Map的应用场景方式2
@ModelAttribute //不带返回值
public void showModel_2(String username, Map<String,User> map){
//模拟去数据库查询
User user = findUserByName(username);
System.out.println("执行了showModel_1方法:"+user);
map.put("abc",user);
}
//处理请求你,模拟修改用户的方法
@RequestMapping("/updateUser")
public String updateModel(@ModelAttribute("abc") User user){
System.out.println("控制器中处理请求的方法:修改用户:"+user);
return "success";
}
//模拟去数据库查询
private User findUserByName(String username){
User user = new User();
user.setUsername(username);
user.setUserage(19);
user.setPassword("123456");
return user;
}
作用:用于多次执行控制器方法间的参数共享
属性:
value:用于指定存入的属性名称
type:用于指定存入的参数类型
使用教程:
<a href="useput">存入SessionAttribute</a>
<a href="useget">取出SessionAttribute</a>
<a href="useclean">删除SessionAttribute</a>
@Controller
@SessionAttributes(value = {"username","password"},types = {Integer.class})
public class AnnoController {
@RequestMapping("/useput") //存入SessionAttribute方法
public String usePut(Model model){
model.addAttribute("username","lisi");
model.addAttribute("password","123");
return "success";
}
@RequestMapping("useget") //取出SessionAttribute方法
public String uetGet(ModelMap model){
System.out.println(model.get("username"));
System.out.println(model.get("password"));
return "success";
}
@RequestMapping("/useclean") //删除SessionAttribute方法
public String useClean(SessionStatus sessionStatus){
sessionStatus.setComplete();
return "success";
}
}