1. RequestParam注解
- 作用:把请求中的指定名称的参数传递给控制器中的形参赋值
- 属性:
name和value:请求参数中的名称
required:请求参数中是否必须提供此参数,默认值是true,必须提供
2. RequestBody注解
- 作用:用于获取请求体的内容(注意:get方法不可以)
- 属性:required:是否必须有请求体,默认值是true
3. PathVariable注解
- 作用:拥有绑定url中的占位符的。例如:url中有/delete/{id},{id}就是占位符
- 属性:value:指定url中的占位符名称
4. RequestHeader注解
- 作用:获取指定请求头的值
- 属性: value:请求头的名称
5. CookieValue注解
- 作用:用于获取指定cookie的名称的值
- 属性:value:cookie的名称
6. ModelAttribute注解
- 作用:
出现在方法上:表示当前方法会在控制器方法执行前线执行。
出现在参数上:获取指定的数据给参数赋值。 - 应用场景
当提交表单数据不是完整的实体数据时,保证没有提交的字段使用数据库原来的数据
7. SessionAttributes注解(注解在类上)
- 作用:用于多次执行控制器方法间的参数共享
- 属性:value:指定存入属性的名称
<%--
Date: 2020/2/26 0026,Time: 14:52
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<%--常用的注解--%>
<a href="anno/testRequestParam?name=张东升">RequestParam</a>
<br>
<form action="anno/testRequestBody" method="post">
用户姓名:<input type="text" name="username" /><br/>
用户年龄:<input type="text" name="age" /><br/>
<input type="submit" value="提交" />
</form>
<br>
<a href="anno/testPathVariable/2">PathVariable 占位符注解 {值}</a>
<br>
<a href="anno/testRequestHeader">RequestHeader:获取请求头的值</a>
<br>
<a href="anno/testCookieValue">RequestHeader:获取Cookie的value值</a><br>
<!--请求没date数据,ModelAttribute字段使用数据库原来的数据-->
<form action="anno/testModelAttribute" method="post">
用户姓名:<input type="text" name="uname" /><br/>
用户年龄:<input type="text" name="age" /><br/>
<input type="submit" value="提交" />
</form>
<br>
<a href="anno/testSessionAttributes">SessionAttributes注解:输出到浏览器页面</a><br>
<a href="anno/getSessionAttributes">SessionAttributes注解:输出到控制台</a><br>
<a href="anno/delSessionAttributes">SessionAttributes注解:清除</a>
</body>
</html>
package com.jh.controller;
import com.jh.domain.User2;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.bind.support.SessionStatus;
import java.util.Date;
import java.util.Map;
/**
* 常用的注解
* */
@Controller
@RequestMapping("/anno")
@SessionAttributes(value = {"msg"})//把msg=美俄存入到session域中
public class AnnoController {
//1.@RequestParam将请求的name赋给username,这样就得出结果了
@RequestMapping("/testRequestParam")
public String testRequestParam(@RequestParam(name = "name") String username){
System.out.println("执行了。。。");
System.out.println(username);//张东升
return "success";
}
//2.@RequestBody获取请求体(只有post请求有请求体)
@RequestMapping("/testRequestBody")
public String testRequestBody(@RequestBody String body){
System.out.println(body);//username=zhangsan&age=23
return "success";
}
//3.@PathVariable 占位符注解 {值}
@RequestMapping("/testPathVariable/{sid}")
public String testPathVariable(@PathVariable(name = "sid") String id){
System.out.println(id);//2
return "success";
}
//4.RequestHeader注解: 获取请求头的值
@RequestMapping("/testRequestHeader")
public String testRequestHeader(@RequestHeader(value = "Accept") String header){
System.out.println(header);//Accept头的值:text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8
return "success";
}
//5.@CookieValue注解:获取Cookie的值
@RequestMapping(value = "/testCookieValue")
public String testCookieValue(@CookieValue(value = "JSESSIONID") String cookieValue){
System.out.println(cookieValue);//E7322A7FF30CEB802C005DA138E7FE7A
return "success";
}
//6.@ModelAttribute注解:带有该注解的方法先执行
/*@RequestMapping(value = "/testModelAttribute")
public String testModelAttribute(User2 user){
System.out.println("testModelAttribute方法执行了。。。");
System.out.println(user);//User2{uname='张安', age=34, date=Wed Feb 26 18:31:48 CST 2020}
return "success";
}*/
/*//该方法会先执行
@ModelAttribute
//带返回值将date数据补全(请求没date数据)
public User2 showUser(String uname){
System.out.println("showUser执行了。。");
//通过用户查询数据库(模拟)
User2 user=new User2();
user.setUname(uname);
user.setAge(20);
user.setDate(new Date());
return user;
}*/
@RequestMapping(value = "/testModelAttribute")
//把下面先执行的ModelAttribute "abc"赋值给user
public String testModelAttribute(@ModelAttribute("abc") User2 user){
System.out.println("testModelAttribute方法执行了。。。");
System.out.println(user);//User2{uname='张安', age=34, date=Wed Feb 26 18:31:48 CST 2020}
return "success";
}
@ModelAttribute
//不带返回值将date数据补全(请求没date数据)
public void showUser(String uname, Map<String,User2>map){
System.out.println("showUser执行了。。");
//通过用户查询数据库(模拟)
User2 user=new User2();
user.setUname(uname);
user.setAge(20);
user.setDate(new Date());
map.put("abc",user);//把user对象存入key="abc"
}
//7.(1)@SessionAttributes注解是放到类中,所以放在类上面
@RequestMapping("/testSessionAttributes")
public String testSessionAttributes(Model model){
System.out.println("testSessionAttributes....");
//底层会存储到request域对象中
model.addAttribute("msg","美俄");
return "success";
/*该结果是在浏览器页面展示:美俄 美俄 {msg=美俄} */
}
//(2)获取值(控制台输出)
@RequestMapping("/getSessionAttributes")
public String testSessionAttributes(ModelMap modelMap){
System.out.println("getSessionAttributes....");
String msg = (String) modelMap.get("msg");
System.out.println(msg);//美俄
return "success";
}
//(3)清除session域存储
@RequestMapping("/delSessionAttributes")
public String delSessionAttributes(SessionStatus status){
System.out.println("getSessionAttributes....");
status.setComplete();
return "success";
}
}