【03】SpringMVC笔记–常用注解
文章目录
一、注解介绍
名称 | 作用 |
---|---|
@Controller | 标记一个类是Controller |
@RequestMapping | 将http请求映射到MVC和RES控制器的处理方法上 |
@RequestParam | 用于将制定的请求参数赋值给方法中的形参( |
@PathVariable | 可以将URL中动态参数绑定到控制器处理方法的入参中 |
@RequestHeader | 可以将请求头信息数据映射到处理的方法上 |
@CookieValue | 用于将请求的Cookie信息映射到处理的方法参数上 |
@ModelAttribute | 将请求参数绑定到Model对象上 |
@SessionAttributes | 可以让参数在多个请求中共享。(只能声明在类上,不能声明在方法上 |
@SessionAttribute | 接收HttpSession对象中的值 |
@ResponseBody | 用于将Controller方法返回的对象,通过HttpMessageConverter转换为指定格式后,写入到Resopnse对象的body数据区。(响应json数据 |
@RequestBody | 用于读取Request请求的body部分数据,使用系统默认配置的HttpMessageConverter进行解析,然后把相应的数据绑定到Controller方法的参数上 |
二、使用示例
1)@RequestParam
这个注解可以用来解决 页面请求参数 和 方法接收参数 名称 不一致的问题
<a href="anno/testRequestParam_02?name=apple"></a>
/**
* 使用@RequestParam注解,
* 解决请求参数和方法参数名称不一致问题
* 属性:name
* 指的是请求参数的名称,然后赋值给被注解的方法参数
*
*/
@RequestMapping("/testRequestParam_02")
public String testRequestParam_02(@RequestParam(name = "name") String username) {
System.out.println("testRequestParam_02....");
System.out.println(username);
return "success";
}
2)@PathVariable
作用:用于绑定url中的占位符。例如:请求url中/delete/{id},这个{id}就是url占位符。 url支持占位符是spring3.0之后加入的。是springmvc支持rest风格URL的一个重要标志。
属性:
- value:用于指定ur1中占位符名称。
- required:是否必须提供占位符。
<!-- 现写法:不用“?”,直接"/"+参数值" -->
<a href="anno/testPathVariable/10"></a>
@RequestMapping("/testPathVariable/{sid}")
public String testPathVariable(@PathVariable(name = "sid") String id) {
//
System.out.println(id);
return "success";
}
3)@RequestHeader
作用:通过属性value:获取指定的请求头值。然后赋值给方法参数
<a href="anno/testRequestHeader"></a>
@RequestMapping("/testRequestHeader")
public String testRequestHeader(@RequestHeader(value = "Accept") String header) {
System.out.println("Accept:" + header);
return "success";
}
4)@CookieValue
作用:获取value指定名称的cookie值
<a href="anno/testCookieValue"></a>
@RequestMapping("/testCookieValue")
public String testCookieValue(@CookieValue(value = "JSESSIONID") String cookieValue) {
System.out.println(cookieValue);
return "success";
}
5)@ModelAttribute
作用:将请求参数绑定到Model对象上
把返回值绑定到Model对象上去
- 带返回值
/**
* 带返回值的
* @param uname
* @return
*/
@ModelAttribute public User getUserBefore_01(String uname){
System.out.println("getUserBefore....");
//假设先获取uname,然后查询出一个User,
User user = new User();
user.setUname(uname);
user.setAge(12);
user.setBirthday(new Date());
System.out.println(user);
//第一种:返回user
return user;
}
- 不带返回值的
````/**
* 不带返回值的,使用一个map
*/
@ModelAttribute
public void getUserBefore_02(String uname, Map<String, User> map) {
System.out.println("getUserBefore....");
//假设先获取uname,然后查询出一个User,
User user = new User();
user.setUname(uname);
user.setAge(12);
user.setBirthday(new Date());
System.out.println(user);
//第一种:返回user
map.put("aaa", user);
}
6)@SessionAttributes
把value数组中的值,作为键名存入session
注解在类上面
- 把一个User对象存入session
//将一个键名为“user"的对象存入session
@SessionAttributes(value = {"user"})
@Controller
@RequestMapping("/anno")
public class AnnoController {
@RequestMapping("/testSessionAttribute")
public String testSessionAttribute(Model model) {
System.out.println("存入user到session....");
User user = new User();
user.setUname("Yangx");
user.setAge(12);
user.setBirthday(new Date());
//底层存入request域中
model.addAttribute("user", user);
System.out.println(user);
return "success";
}
}
- 取出session中的User对象(通过
ModelMap
类
@RequestMapping("/getSessionAttribute")
public String getSessionAttribute(ModelMap modelMap) {
System.out.println("取出user");
User user = (User) modelMap.get("user");
System.out.println(user);
return "success";
}
- 删除session域中所有的数据(通过
SessionStatus
类
@RequestMapping("/delSessionAttribute")
public String delSessionAttribute(SessionStatus status) {
System.out.println("删除session数据...");
status.setComplete();
return "success";
}
}
7)@RequestBody
作用:用于读取Request请求的body部分数据,然后把相应的数据绑定到Controller方法的参数上
@RequestMapping("/testRequestBody")
public String testRequestBody(@RequestBody String body) {
System.out.println(body);
return "success";
}