1、作用

  • Spring MVC使用@RequestMapping注解为控制器指定处理的URL请求。

  • 在控制器的类、方法上都可以标注:

    • :提供初步的请求映射信息。相对于WEB应用的根目录。
    • 方法:提供进一步的细分映射信息。相对于类定义处的URL。
  • DispatcherServlet截获请求后,就通过控制器上@RequestMapping提供的映射信息确定请求所对应的处理方法。

  package com.xianhuii;

  import org.springframework.stereotype.Controller;
  import org.springframework.web.bind.annotation.RequestMapping;

  @Controller
  @RequestMapping("/springmvc")
  public class RequestMappingTest01 {
      private static final String SUCCESS = "success";

      /**
       *  1、可以修饰类、方法
       *      1.1、类:提供初步的请求映射信息。相对于WEB应用的根目录
       *      1.2、方法:提供进一步的细分映射信息。相对于类定义处的URL。
           *  2、此时的URL为:/springmvc/testRequestMapping
       * @return
       */
      @RequestMapping("/testRequestMapping")
      public String testRequestMapping() {
          System.out.println("testRequestMapping");
          return SUCCESS;
      }
  }

2、源码

package org.springframework.web.bind.annotation;

import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
import org.springframework.core.annotation.AliasFor;

@Target({ElementType.TYPE, ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Mapping
public @interface RequestMapping {
    String name() default "";

    @AliasFor("path")
    String[] value() default {};

    @AliasFor("value")
    String[] path() default {};

    RequestMethod[] method() default {};

    String[] params() default {};

    String[] headers() default {};

    String[] consumes() default {};

    String[] produces() default {};
}

3、method

package com.xianhuii;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;

@Controller
@RequestMapping("/springmvc")
public class RequestMappingTest01 {
    private static final String SUCCESS = "success";

    /**
     *  使用method属性来指定请求方式
     * @return
     */
    @RequestMapping(value = "/testMethod", method = RequestMethod.POST)
    public String testMethod() {
        System.out.println("testMethod");
        return SUCCESS;
    }
}

4、params、heads

  • params:请求参数。

  • heads:请求头。

    param1:表示请求必须包含名为param1的请求参数
    !param1:表示请求不能包含名为param1的请求参数
    param1 != value1:表示请求包含名为param1的请求参数,但其值不能为value1
    {"param1=value1","param2"}:请求参数必须包含名为param1和param2的两个请求参数,且param1参数的值必须为value1
  package com.xianhuii;

  import org.springframework.stereotype.Controller;
  import org.springframework.web.bind.annotation.RequestMapping;
  import org.springframework.web.bind.annotation.RequestMethod;

  @Controller
  @RequestMapping("/springmvc")
  public class RequestMappingTest01 {
      private static final String SUCCESS = "success";

      /**
       * 可以使用params、headers来更加精确的映射请求。
       * params、headers支持简单的表达式。
       * @return
       */
      @RequestMapping(path = "/testParamsAndHeaders", params = {"username=xianhuii","age=18"})
      public String testParamsAndHeaders() {
          System.out.println("testParamsAndHeaders");
          return SUCCESS;
      }

  }

5、Ant路径

  • Ant风格资源地址支持3种匹配符:

    • ?:匹配文件名中的一个字符。
    • *:匹配文件名中的任意字符。
    • **:匹配多层路径。
      /user/*/createUser:匹配:/user/aaa/createUser、/user/bbb/createUser等URL
      /url/**/createUser:匹配:/user/createUser、/user/aaa/createUser、/user/aaa/bbb/createUser等URL
      /user/createUser??:匹配/user/createUseraa、/user/createUserbb等URL
  package com.xianhuii;

  import org.springframework.stereotype.Controller;
  import org.springframework.web.bind.annotation.RequestMapping;
  import org.springframework.web.bind.annotation.RequestMethod;

  @Controller
  @RequestMapping("/springmvc")
  public class RequestMappingTest01 {
      private static final String SUCCESS = "success";

      @RequestMapping("/testAnt/*/abc")
      public String testAntPath() {
          System.out.println("testAntPath");
          return SUCCESS;
      }
  }