首页 > 代码库 > 二、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之常用注解