• SpringMVC访问路径设置


    @RequestMapping注解的作用就是将请求的 URL 地址和处理请求的方式(handler方法)关联起来,建立映射关系

    SpringMVC 接收到指定的请求,就会来找到在映射关系中对应的方法来处理这个请求。

    1. 精准路径匹配

    在@RequestMapping注解指定 URL 地址时,不使用任何通配符,按照请求地址进行精确匹配。

    @Controller
    public class UserController {
    
        /**
         * 精准设置访问地址 /user/login
         */
        @RequestMapping("/user/login")
        @ResponseBody
        public String login(){
            System.out.println("UserController.login");
            return "login success!!";
        }
    
        /**
         * 精准设置访问地址 /user/register
         */
        @RequestMapping("/user/register")
        @ResponseBody
        public String register(){
            System.out.println("UserController.register");
            return "register success!!";
        }
        
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25

    2. 模糊路径匹配

    在@RequestMapping注解指定 URL 地址时,通过使用通配符,匹配多个类似的地址。

    @Controller
    public class ProductController {
    
        /**
         *  路径设置为 /product/*  
         *    /* 为单层任意字符串  /product/a  /product/aaa 可以访问此handler  
         *    /product/a/a 不可以
         *  路径设置为 /product/** 
         *   /** 为任意层任意字符串  /product/a  /product/aaa 可以访问此handler  
         *   /product/a/a 也可以访问
         */
        @RequestMapping("/product/*")
        @ResponseBody
        public String show(){
            System.out.println("ProductController.show");
            return "product show!";
        }
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19

    注意:

    • *:只能匹配URL地址中的一层,如果想准确匹配两层,那么就写 / */ * 以此类推。

    • ** :可以匹配URL地址中的多层。

      其中所谓的一层或多层是指一个URL地址字符串被“/”划分出来的各个层次

    3. 类和方法级别区别

    @RequestMapping 注解可以用于类级别和方法级别,它们之间的区别如下:

    1. 设置到类级别:@RequestMapping 注解可以设置在控制器类上,用于映射整个控制器的通用请求路径。这样,如果控制器中的多个方法都需要映射同一请求路径,就不需要在每个方法上都添加映射路径。
    2. 设置到方法级别:@RequestMapping 注解也可以单独设置在控制器方法上,用于更细粒度地映射请求路径和处理方法。当多个方法处理同一个路径的不同操作时,可以使用方法级别的 @RequestMapping 注解进行更精细的映射。
    //1.标记到handler方法
    @RequestMapping("/user/login")
    @RequestMapping("/user/register")
    @RequestMapping("/user/logout")
    
    //2.优化标记类+handler方法
    //类上
    @RequestMapping("/user")
    //handler方法上
    @RequestMapping("/login")
    @RequestMapping("/register")
    @RequestMapping("/logout")
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    下面的写法是等同上面的。当类和方法都有映射路径时,那么一个方法的完整路径就是类路径 + 方法路径。

    4. 附带请求方式限制

    HTTP 协议定义了八种请求方式,在 SpringMVC 中封装到了下面这个枚举类:

    public enum RequestMethod {
      GET, HEAD, POST, PUT, PATCH, DELETE, OPTIONS, TRACE
    }
    
    • 1
    • 2
    • 3

    默认情况下:@RequestMapping(“/logout”) 任何请求方式都可以访问!

    如果需要特定指定:

    @Controller
    public class UserController {
    
        /**
         * 精准设置访问地址 /user/login
         * method = RequestMethod.POST 可以指定单个或者多个请求方式!
         * 注意:违背请求方式会出现405异常!
         */
        @RequestMapping(value = "/user/login" , method = RequestMethod.POST)
        @ResponseBody
        public String login(){
            System.out.println("UserController.login");
            return "login success!!";
        }
    
        /**
         * 精准设置访问地址 /user/register
         */
        @RequestMapping(value = "/user/register", method = {RequestMethod.POST,RequestMethod.GET})
        @ResponseBody
        public String register(){
            System.out.println("UserController.register");
            return "register success!!";
        }
    
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26

    注意:违背请求方式,会出现405异常!!!

    5. 进阶注解

    还有 @RequestMapping 的 HTTP 方法特定快捷方式变体:

    • @GetMapping 等价于@RequestMapping(method = {RequestMethod.POST,RequestMethod.GET})
    • @PostMapping等价于@RequestMapping(method = {RequestMethod.POST,RequestMethod.POST})
    • @PutMapping等价于@RequestMapping(method = {RequestMethod.POST,RequestMethod.PUT})
    • @DeleteMapping等价于@RequestMapping(method = {RequestMethod.POST,RequestMethod.DELETE})

    注意:进阶注解只能添加到handler方法上,无法添加到类上!

  • 相关阅读:
    计算机毕业设计Java酒店管理信息系统(源码+mysql数据库+系统+lw文档)
    pytorch深度学习实战lesson18
    如何利用vscode进行断点调试后端node开发的项目,如express或koa?
    关于c++源文件与头文件的编译规则总结
    javascript将html中的dom元素转图片
    MySQl索引
    C++学习笔记(二十四)
    ADDS:检查 AD Domain 的健康和复制状态
    简明Python教程(面向对象)
    护眼灯真能保护眼睛吗?2022双十二买什么样的护眼灯对眼睛好
  • 原文地址:https://blog.csdn.net/Kaiser__/article/details/136707862