首页 > 代码库 > 二、Spring MVC之常用注解
二、Spring MVC之常用注解
Spring MVC中常用的注解有以下几个:@Controller, @RequestMapping, @PathVariable, @CookieValue, @SessionAttributes、@ResponseBody、@RequestHeader和@ModelAttribute
@Controller
上一节创建一个新的项目就用到了@Controller注解.通过这个注解,就可以让组件扫描将一个类识别为控制器组件并进行注册.
注册后,控制器映射到URL上的方法就可以进行请求处理.
@RequestMapping
这个注解带有很多属性,其中必须有的属性是value属性,如@RequestMapping(value="http://www.mamicode.com/hello")
这样就可以将被注解的方法或类被映射URL的相应路径.其中类注解可以看作是一个前缀,如:
@Controller @RequestMapping(value="/MyController")//可以看作是一个前缀 public class MyController{ //有了"前缀",则URL需要加上/MyController才可以映射到本类中的方法 //如localhost:8080/SpringMVCTest/MyController/Hello @RequestMapping(value="http://www.mamicode.com/Hello") public String hello(){ //... } }
@RequestMapper支持的属性:
属性 | 类型 | 说明 |
name | String | 映射地址的一个别名 |
method | RequestMethod | 指定接受的请求方式,比如POST,GET |
consumes | String[] | 指定请求的提交内容类型,例如"text/html" |
produces | String[] | 指定返回的内容类型,必须是request请求头中包含的类型 |
params | String[] | 指定request中必须包含指定的参数值 |
headers | String[] | 指定header中必须包含指定的header值 |
@PathVariable
@PathVariable用于获取在RequestMapping的value属性中的值,如
@RequestMapping(value="http://www.mamicode.com/hello/{UserID}") public String hello(@PathVariable int UserID){ //... }
通过@PathVariable注解的属性,就可以在URL中获取到相应的属性,并且支持String类型和int类型
@CookieValue
@CookieValue将Cookie数据映射到方法参数上:
@RequestMapping(value="http://www.mamicode.com/hello") public String helloWorld(Model model,@CookieValue String JSESSIONID){ System.out.println(JSESSIONID); //... }
@CookieValue支持的属性:
属性 | 类型 | 说明 |
name | String | 要获取的属性的名称 |
value | String | name属性的别名 |
required | boolean |
表示该参数是否必须绑定,默认为是 |
defaultValue | String |
参数的默认值 |
@RequestHeader跟@CookieValue比较类似,给出一个例子
@RequestMapping("/hello") public String hello(@RequestHeader("User-Agent") String userAgent,@RequestHeader("Accept") String[] accepts){ //... }
@SessionAttributes
该注解用于注解一个类,表示将Model中的一个对象存放到HttpSession当中,这就意味着这个类中的方法可能需要有Model:
属性 | 类型 | 说明 |
names | String[] | Model中的属性名称,也是存储在HttpSession当中的属性名称 |
value | String[] | names属性的别名 |
types | Class<?>[] | 表示属性是否需要指定类型 |
使用例子:
@Controller @SessionAttributes(names={"message"}) public class HelloController { @RequestMapping(value="/hello") public String helloWorld(Model model){ model.addAttribute("message", "Hello World!"); //... } }
<%@ page language="java" contentType="text/html; charset=UTF-8" import="java.util.*" pageEncoding="UTF-8"%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <title>welcome</title> </head> <body> ${sessionScope.message }<br> </body> </html>
@ResponseBody
@ResponseBody表示该方法返回的内容作为请求响应的响应正文
@RequestMapping(value="http://www.mamicode.com/responseBodyTest") @ResponseBody public String responseBodyTest(){ return "Hello World!"; }
@ModelAttribute
@ModelAttribute用于注解方法和方法参数,被注解的方法如果使用了@ResponseBody注解,该注解会失效
被注解为@ModelAttribute常用于接收请求后进行model的初始化
也就是说,在接收到请求之后,被注解的方法会先执行,在该方法中添加到model中的属性会被本次请求中后续执行的方法继承
1.当@ModelAttribute注解方法时,该方法可以返回一个对象,此时ModelAttribute的name属性将作为model中的属性名,返回的对象作为该属性的值:
//model中message的值等于"Hello World!" @ModelAttribute("message") public String modelAttribute(){ return "Hello World!"; }
2.当@ModelAttribute没有指定名称时,该方法不返回对象,而在方法添加一个Model参数,在方法内给model添加属性
@ModelAttribute public void modelAttribute(Model model){ model.addAttribute("message", "Hello World!"); }
3.给方法的参数注解为@ModelAttribute时,则根据@ModelAttribute的name属性寻找name属性相同的@ModelAttribute方法来给参数进行赋值:
@ModelAttribute("HelloWorld") public String modelAttribute(){ return "Hello World!"; } @RequestMapping(value="/responseBodyTest") @ResponseBody public String responseBodyTest(@ModelAttribute("HelloWorld") String message){ System.out.println(message); return message; }
除了以上注解,还有其他很多功能强大的注解,由于用的相对较少,这里不一一介绍
二、Spring MVC之常用注解