文章目录
- 1. RequestParam 注解
- 2. RequestBody 注解
- 3. PathVariable 注解
- 4. RequestHeader 注解(了解)
- 5. COOKIEValue 注解(了解)
- 6. ModelAttribute 注解
- 7. SessionAttributes 注解
1. RequestParam 注解
-
作用: 把请求中的指定名称的参数传递给控制器中的形参赋值
-
属性:
- value: 请求参数中的名称
- required: 请求参数中是否必须提供此参数,默认值是true,必须提供(如果不提供会报错)
- 代码如下:
jsp:
<a href&#61;"anno/testRequestParam?username&#61;xiuyan">测试RequestParama>
Controller&#xff1a;
&#64;Controller
&#64;RequestMapping(path &#61; "/anno")
public class AnnoController {
&#64;RequestMapping(path &#61; "/testRequestParam")
public String testRequestParam(&#64;RequestParam(value &#61; "username") String name){
System.out.println("测试RequestParam注解");
System.out.println(name);
return "success";
}
}
测试结果&#xff1a;
2. RequestBody 注解
-
作用&#xff1a;用于获取请求体的内容&#xff08;注意&#xff1a;get方法不可以&#xff09;
-
属性&#xff1a;
- required&#xff1a;是否必须有请求体&#xff0c;默认值是true
-
代码如下&#xff1a;
jsp&#xff1a;
<form action&#61;"anno/testRequestBody" method&#61;"post">
姓名&#xff1a;<input type&#61;"text" name&#61;"uname"><br>
年龄&#xff1a;<input type&#61;"text" name&#61;"age"><br>
<input type&#61;"submit" value&#61;"提交" />
form>
Controller&#xff1a;
&#64;Controller
&#64;RequestMapping(path &#61; "/anno")
public class AnnoController {
&#64;RequestMapping(path &#61; "/testRequestBody")
public String testRequestBody(&#64;RequestBody String body){
System.out.println("测试RequestBody注解");
System.out.println(body);
return "success";
}
}
测试结果&#xff1a;
3. PathVariable 注解
- 作用&#xff1a;拥有绑定url中的占位符的。 例如&#xff1a;url中有/delete/{id}&#xff0c;{id}就是占位符
- 属性&#xff1a;
- value&#xff1a;指定url中的占位符名称
- Restful 风格的 URL&#xff1a;
- 请求路径一样&#xff0c;可以根据不同的请求方式去执行后台的不同方法
- restful风格的URL优点
- 结构清晰
- 符合标准
- 易于理解
- 扩展方便
- 代码如下&#xff1a;
jsp&#xff1a;
<a href&#61;"anno/testPathVariable/111">测试PathVariablea>
Controller&#xff1a;
&#64;Controller
&#64;RequestMapping(path &#61; "/anno")
public class AnnoController {
&#64;RequestMapping(path &#61; "/testPathVariable/{sid}")
public String testPathVariable(&#64;PathVariable(name&#61;"sid") String id){
System.out.println("测试PathVariable注解");
System.out.println(id);
return "success";
}
}
4. RequestHeader 注解&#xff08;了解&#xff09;
-
作用&#xff1a;获取指定请求头的值
-
属性&#xff1a;
- value&#xff1a;请求头的名称
-
代码如下
&#64;RequestMapping(path&#61;"/hello")
public String sayHello(&#64;RequestHeader(value&#61;"Accept") String header) {
System.out.println(header);
return "success";
}
5. COOKIEValue 注解&#xff08;了解&#xff09;
-
作用&#xff1a;用于获取指定COOKIE的名称的值
-
属性&#xff1a;
- value&#xff1a;COOKIE的名称
-
代码&#xff1a;
&#64;RequestMapping(path&#61;"/hello")
public String sayHello(&#64;COOKIEValue(value&#61;"JSESSIONID") String COOKIEValue) {
System.out.println(COOKIEValue);
return "success";
}
6. ModelAttribute 注解
- 作用&#xff1a;
- 出现在方法上&#xff1a;表示当前方法会在控制器方法执行前先执行。
- 出现在参数上&#xff1a;获取指定的数据给参数赋值。
- 应用场景&#xff1a;
- 当提交表单数据不是完整的实体数据时&#xff0c;保证没有提交的字段使用数据库原来的数据。
- 具体的代码&#xff1a;
有返回值&#xff1a;
jsp&#xff1a;
<form action&#61;"anno/testModuleAttribute" method&#61;"post">
姓名&#xff1a;<input type&#61;"text" name&#61;"username"><br>
年龄&#xff1a;<input type&#61;"text" name&#61;"age"><br>
<input type&#61;"submit" value&#61;"提交" />
form>
Controller&#xff1a;
&#64;RequestMapping(path&#61;"/testModuleAttribute")
public String testModuleAttribute( User user){
System.out.println("showUser方法执行了");
System.out.println(user);
return "success";
}
&#64;ModelAttribute
public User showUser(String username){
System.out.println("测试ModuleAttribute注解");
User user &#61; new User();
user.setUsername("xiuyan");
user.setAge(22);
user.setDate(new Date());
return user;
}
测试结果&#xff1a;
结果显示&#xff0c;由于先执行 showUser 方法&#xff0c;在方法里面封装了 User 对象并返回&#xff0c;从而再执行 testModuleAttribute 方法时&#xff0c;不会因为传入表单没有传入日期属性&#xff0c;而导致日期属性为空。
无返回值&#xff1a;
&#64;RequestMapping(path&#61;"/testModuleAttribute")
public String testModuleAttribute(&#64;ModelAttribute("abc") User user){
System.out.println("showUser方法执行了");
System.out.println(user);
return "success";
}
&#64;ModelAttribute
public void showUser(String username, Map<String, User> map){
System.out.println("测试ModuleAttribute注解");
User user &#61; new User();
user.setUsername("xiuyan");
user.setAge(22);
user.setDate(new Date());
map.put("abc", user);
}
测试结果&#xff1a;
7. SessionAttributes 注解
- 作用&#xff1a;用于多次执行控制器方法间的参数共享
- 属性&#xff1a;
- value&#xff1a;指定存入属性的名称
- 代码如下&#xff1a;
jsp&#xff1a;
<a href&#61;"anno/testSessionAttributes">测试SessionAttributesa><br>
<a href&#61;"anno/getSessionAttributes">测试getSessionAttributesa><br>
<a href&#61;"anno/delSessionAttributes">测试delSessionAttributesa><br>
&#64;Controller
&#64;RequestMapping(path &#61; "/anno")
&#64;SessionAttributes(value &#61; {"msg"})
public class AnnoController {
&#64;RequestMapping(path&#61;"/testSessionAttributes")
public String testSessionAttributes(Model model){
System.out.println("testSessionAttributes方法执行了");
model.addAttribute("msg", "haha");
return "success";
}
&#64;RequestMapping(path&#61;"/getSessionAttributes")
public String getSessionAttributes(ModelMap model){
System.out.println("getSessionAttributes方法执行了");
String msg &#61; (String) model.get("msg");
System.out.println(msg);
return "success";
}
&#64;RequestMapping(path&#61;"/delSessionAttributes")
public String delSessionAttributes(SessionStatus status){
System.out.println("delSessionAttributes方法执行了");
status.setComplete();
return "success";
}
}
成功页面&#xff1a;
<%&#64; page contentType&#61;"text/html;charset&#61;UTF-8" language&#61;"java" isELIgnored&#61;"false" %>
<html>
<head>
<title>Titletitle>
head>
<body>
<h3>成功页面h3>
${requestScope.msg}
${sessionScope.msg}
body>
html>