1.RequestParam
1. 作用:
把请求中的指定名称的参数传递给控制器中的形参赋值
2. 属性
value:请求参数中的名称
name:同上
required:请求参数中是否,必须提供此参数,默认值是true,必须提供
(如果有value或者name属性前端必须提供和value或者name定义的名称一样);
为false:可以不提供和value或者name定义的名称一样的名称
代码如下
<!--JSP页面-->
<a href="anno/testRequestParam?username=joyTop">RequestParam</a>
<!--后端Controller-->
@Controller
@RequestMapping("/anno")
public class AnnoController {
@RequestMapping("/testRequestParam")
public String testRequestParam(@RequestParam(name = "name",required = false) String username){
System.out.println(username+"---testRequestParam执行了。。。");
return "success";
}
}
2.RequestBody注解
1. 作用:
用于获取请求体内容。直接使用得到是 key=value&key=value…结构的数据。
get 请求方式不适用。
2. 属性
required:是否必须有请求体。默认值是:true。当取值为 true 时,get 请求方式会报错。如果取值
为 false,get 请求得到是 null。
代码如下
<!--JSP页面-->
<form action="anno/testRequestBody" method="post">
用户姓名:<input type="text" name="username" /> <br>
用户年龄:<input type="text" name="age" /> <br>
<input type="submit" value="提交" /> <br>
</form>
<!--后端Controller-->
@RequestMapping("/testRequestBody")
public String testRequestBody(@RequestBody String body){
System.out.println(body+"---testRequestParam执行了。。。");
return "success";
}
控制台输出
username=lujun&age=22—testRequestParam执行了。。。
3.PathVaribale注解
1. 作用:
用于绑定 url 中的占位符。例如:请求 url 中 /delete/{id},这个{id}就是 url 占位符。
url 支持占位符是 spring3.0 之后加入的。是 springmvc 支持 rest 风格 URL 的一个重要标志。
2. 属性
value:用于指定 url 中占位符名称。
required:是否必须提供占位符。
代码如下
<!--JSP页面-->
<a href="anno/testPathVariable/22">PathVariable</a>
<!--后端Controller-->
@RequestMapping("/testPathVariable/{sid}")
public String testPathVariable(@PathVariable(name = "sid") String id){
System.out.println(id+"---testRequestParam执行了。。。");
return "success";
}
控制台输出
22- - -testRequestParam执行了。。。
3.RequestHeader注解
1. 作用:
用于获取请求消息头。
2. 属性
value:提供消息头名称
required:是否必须有此消息头
代码如下
<!--JSP页面-->
<a href="anno/RequestHeadr">RequestHeadr</a>
<!--后端Controller-->
@RequestMapping("/RequestHeadr")
public String RequestHeadr(@RequestHeader(name = "Accept") String Header){
System.out.println(Header+"---testRequestParam执行了。。。");
return "success";
}
控制台输出
text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,/;q=0.8—testRequestParam执行了。。。
4.CookieValue注解
1. 作用:
用于把指定 cookie 名称的值传入控制器方法参数。
2. 属性
value:指定 cookie 的名称。
required:是否必须有此 cookie。
代码如下
<!--JSP页面-->
<a href="anno/Cookie">Cookie</a>
<!--后端Controller-->
@RequestMapping("/Cookie") //Cookie: JSESSIONID=5B8A20510B8009DD0D886C6DFE0CB521
public String testCookie(@CookieValue(name = "JSESSIONID") String Cookievalue){
System.out.println(Cookievalue+"---testRequestParam执行了。。。");
return "success";
}
控制台输出
5B8A20510B8009DD0D886C6DFE0CB521—testRequestParam执行了。。。
5.ModelAttribute注解
1. 作用:
该注解是 SpringMVC4.3 版本以后新加入的。它可以用于修饰方法和参数。出现在方法上,表示当前方法会在控制器的方法执行之前,先执行。它可以修饰没有返回值的方法,也可以修饰有具体返回值的方法。出现在参数上,获取指定的数据给参数赋值。
2. 属性
value:用于获取数据的 key。key 可以是 POJO 的属性名称,也可以是 map 结构的 key。
3.应用场景:
当表单提交数据不是完整的实体类数据时,保证没有提交数据的字段使用数据库对象原来的数据。
例如:
我们在编辑一个用户时,用户有一个创建信息字段,该字段的值是不允许被修改的。在提交表单数据是肯定没有此字段的内容,一旦更新会把该字段内容置为 null,此时就可以使用此注解解决问题。
代码如下
<!--JSP页面-->
<form action="anno/ModelAttribute" method="post">
用户姓名:<input type="text" name="uname" /> <br>
用户年龄:<input type="text" name="age" /> <br>
<input type="submit" value="提交" /> <br>
</form>
<!--后端Controller 有返回参数-->
@RequestMapping("/ModelAttribute")
public String testModelAttribute(User user){
System.out.println(user+"---testModelAttribute执行了。。。");
return "success";
}
//该方法先执行
// @ModelAttribute
public User showUser(String uname){
System.out.println("showUser执行了。。。");
//通过用户名查数据
User user = new User();
user.setUname(uname);
user.setAge("12");
user.setDate(new Date());
return user;
}
<!--后端Controller 无返回参数------------------------------------------------------------------------------->
@RequestMapping("/ModelAttribute")
public String testModelAttribute(@ModelAttribute(name = "abc") User user){
System.out.println(user+"---testModelAttribute执行了。。。");
return "success";
}
@ModelAttribute
public void showUser2(String uname, Map<String,User> map){
System.out.println("showUser执行了。。。");
//通过用户名查数据
User user = new User();
user.setUname(uname);
user.setAge("12");
user.setDate(new Date());
map.put("abc",user);
}
控制台输出
后端Controller 有返回参数
showUser执行了。。。
User{uname=‘lujun’, age=‘123’, date=Tue Mar 10 15:45:11 CST 2020}—testModelAttribute执行了。。。
后端Controller 无返回参数
showUser执行了。。。
User{uname=‘lujun’, age=‘ee22’, date=Tue Mar 10 15:49:02 CST 2020}—testModelAttribute执行了。。。
4.SessionAttribute注解
1. 作用:(作用于类上面)
用于多次执行控制器方法间的参数共享。
2. 属性
value:用于指定存入的属性名称
type:用于指定存入的数据类型。
代码如下
<!--JSP页面-->
<!-- 存值 -->
<a href="anno/SessionAttribute">SessionAttribute</a>
<!--取值 -->
<a href="anno/getSessionAttribute">getSessionAttribute</a>
<!--删除值 -->
<a href="anno/delSessionAttribute">delSessionAttribute</a>
<!--后端Controller-->
@Controller
@RequestMapping("/anno")
@SessionAttributes(value = {"msg"}) //把msg=joyTop,存入到session域对象中
public class AnnoController {
//存值
@RequestMapping("/SessionAttribute")
public String testSessionAttribute(Model model){
System.out.println("---testSessionAttribute。。。");
//存储到Request域对象中
model.addAttribute("msg","joyTop");
return "success";
}
//取值
@RequestMapping("/getSessionAttribute")
public String getSessionAttribute(ModelMap modelMap){
//存储到Request域对象中
String msg = (String) modelMap.get("msg");
System.out.println(msg+"---getSessionAttribute。。。");
return "success";
}
//清除
@RequestMapping("/delSessionAttribute")
public String delSessionAttribute(SessionStatus status){
status.setComplete();
System.out.println("---delSessionAttribute。。。");
return "success";
}
}
控制台输出showUser执行了。。。
—testSessionAttribute。。。
showUser执行了。。。
joyTop—getSessionAttribute。。。
showUser执行了。。。
—delSessionAttribute。。。
showUser执行了。。。
null—getSessionAttribute。。。