Skip to content

注解解析

对应SpringMVC中的注解进行解析


@RequestMapping

@RequestMapping:请求映射到具体的某个方法上(虚拟地址映射)

作用:用于建立请求URL和处理器请求方法之间的对应关系(对请求的虚拟地址进行映射到具体的某个方法上)

使用位置:

  • 在类上,请求URL的第一级访问目录,此处不写的话,就相当于应用的根目录

  • 在方法上,请求URL的第二级访问目录,与类上的使用@RequestMapping标注的一级目录一起组成访问虚拟路径

    java
    @Controller   // 放到Spring容器中
    @RequestMapping("/new")
    public class UserController {
        @RequestMapping("/quick")  // 请求映射,访问/quick时,就会映射到save()方法
        public String save() {
            System.out.println("Controller save running");
            return "/success.jsp";   // 跳转到具体的视图,使用的是相对地址,加上/表示从Webapp文件夹下找具体的.jsp资源
        }
    }

    此时的访问地址为http://loacalhost:8080/new/quick

属性:@RequestMapping的具体属性参数有:

  • value:用于指定请求的URL,它和path属性的作用是一样的

    如:@RequestMapping(value="/quick"),只写一个value属性,value可以省略

  • method:用于指定请求的方式

    如:@RequestMapping(value="/quick", method=RequestMethod.POST)

    当前请求方式必须是POST的请求方式才能访问到

  • params:用于指定限制请求参数的条件,它支持简单的表达式,要求参数请求的keyvalue必须和配置的一样

    如:params={"accountName"}:表示请求参数必须有accountName

    params={"money!100"}:表示请求参数中money不能是100


@ResponseBody

@ResponseBody注解用于告知SpringMVC框架,其方法返回的字符串不是用于页面视图的跳转,而是直接在http响应体中返回,用于回写数据使用

java
@RequestMapping("/quick2")  // 请求映射,访问/quick2时,就会映射到save()方法
@ResponseBody // 告知SpringMVC框架,其方法返回的字符串不是跳转,而是直接在http响应体中返回
public String quickMethod() throws IOException {
    return "hello world";
}

@RequestBody

@RequestBody表示将请求体的内容,直接封装到后面对应的集合中

java
@RequestMapping("/quick")
@ResponseBody
public Void quickMethod(@RequestBody List<User> userList) throws IOException {
    System.out.println(userList);  // [User{username='jlc', age=25}, User{username='lisi', age=20}]
}

@RequestParam

@RequestParam是一个绑定参数注解

当请求的参数名称与Controller的业务方法参数名称不一致时,就需要通过@RequestParam注解显示绑定与形参的关系:

java
@RequestMapping("/quick")
@ResponseBody
public Void quickMethod(@RequestParam(value="name") String username) throws IOException {
    System.out.println(username);   // jlc
}

将请求的name参数,映射到对应的username参数,如果@RequestParam()只有一个参数时,value可以省略

在浏览器地址栏输入http://localhost:8080/quick?name=jlc

注解@RequestParam有如下的参数可以进行使用:

  • value:与请求参数名称
  • required:指定的请求是否必须包括参数,默认是true,提交时如果没有此参数则报错
  • defaultValue:当没有指定请求参数时,则使用指定的默认值
java
@RequestMapping("/quick")
@ResponseBody
public Void quickMethod(@RequestParam(value="name",required=false, defaultValue="jlc") String username) throws IOException {
    System.out.println(username);   // jlc
}

@PathVariavle

使用@PathVariavle注解进行占位符的匹配获取工作

对应客户端浏览器输入的地址:http://localhost:8080/quick/jlc

获取Restful风格的参数:

java
@RequestMapping("/quick/{name}")   // {name}是占位的,获取请求地址的对应内容
@ResponseBody
public Void quickMethod(@PathVariavle(value="name", required=true) String name) throws IOException {
    System.out.println(name);  // jlc
}

@PathVariavle(value="name", required=true)中的name要和@RequestMapping("/quick/{name}")中的name一致


@RequestHeader

@RequestHeader注解就可以获取请求头数据,该注解的属性有:

  • value:请求头的名称
  • required:是否必须携带此请求头
java
@RequestMapping("/quick")
@ResponseBody
public Void quickMethod(@RequestHeader(value="User-Agent", required=false) String headerValue) throws IOException {
    System.out.println(headerValue);
}

请求头中的User-Agent表示当前客户端浏览器的信息


@CookieValue

@CookieValue注解获取请求头中的Cookie的值(session的一种标识,其值一般是一个键值对JSESSIONID=xxxxxx),@CookieValue注解的属性如下:

  • value:指定cookie的名称
  • required:是否必须携带此cookie
java
@RequestMapping("/quick")
@ResponseBody
public Void quickMethod(@CookieValue(value="JSESSIONID", required=false) String jsessionid) throws IOException {
    System.out.println(jsessionid);
}

Released under the MIT License.