2 @RequestMapping

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;
      }
  }
全部评论

相关推荐

小厂面经,也是我的处女面(30min)1.自我介绍2.spring boot的自动装配原理(好多类和接口的单词都忘了全称是啥了,就说了记得的单词,流程应该说对了吧)3.有用过redis吗?主要是用在实现什么功能(说了技术派用redis的zset来实现排行榜)5.有了解过Redisson吗?讲一下对于分布式锁的了解以及在什么场景下应用(说了秒杀场景)6.对mysql有了解吗?包括它的索引优化和创建(把想起来的全说了)7.了解设计模式吗?比如单例模式,为什么要使用单例模式,它的优点是什么(昨天刚看的设计模式)8.工厂模式有了解吗?主要的使用场景是?(也是昨天刚看的)9.场景题:有7个服务器,需要在早上十点定时的向数据库中的用户表中的用户发短信,如果做到发送的消息不重复,且如果发送失败了需要知道是到哪个用户失败了,这样下次就直接从这个用户开始(我答了用spring task来实现定时,用分布式锁来保证只有一份服务器可以发送消息,用消息队列来存储消息,然后用消息确认机制来保证错误信息的记录,以及在数据库或者业务层面完成消息消费的幂等性)10.场景题:如果在系统启动的时间就将数据库的所有用户相关的信息都读到一个hashmap中(这个没啥思路,没答好)27届的投了一个星期终于有一个面试了,大部分公司都只招26的
inari233:已oc,拒了
查看9道真题和解析
点赞 评论 收藏
分享
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务