• 技术文章 >Java >java教程

    怎么将某个http请求映射到某个方法上?SpringBoot入门:URL 映射

    php是最好的语言php是最好的语言2018-07-27 10:24:02原创3825
    0x000 概述:将某个http请求映射到某个方法上。0x001 @RequestMapping:这个注解可以加在某个Controller或者某个方法上,如果加在Controller上

    0x000 概述

    将某个http请求映射到某个方法上

    0x001 @RequestMapping

    这个注解可以加在某个Controller或者某个方法上,如果加在Controller上,则这个Controller中的所有路由映射都将会加上这个前缀(下面会有栗子),如果加在方法上,则没有前缀(下面也有栗子)。

    @RequestMapping有以下属性

    0x002 路由匹配

    1. 首先编写ControllerController头部的@RestController将这个控制器标注为Rest控制器:

      package com.lyxxxx.rest.controller;
      
      import org.springframework.web.bind.annotation.RequestMapping;
      import org.springframework.web.bind.annotation.RestController;
      
      @RestController
      public class HelloController {
      
      }
    2. 添加方法,并添加URL匹配:

          @RequestMapping()
          public Object hello() {
              return "hello";
          }

      说明:上面添加了一个方法,名为hello,没有给定任何的属性,则默认匹配所有URL,方法为GET,所以我们可以直接使用GET方式来访问该路由

      $ curl 127.0.0.1:8080
      hello
      $ curl 127.0.0.1:8080/user
      hello
      $ curl 127.0.0.1:8080/user/1
      hello
    3. 精确匹配

      @RequestMapping(value = "/hello2")
      public Object hello2() {
          return "hello2";
      }

      说明:上面将value设置为hello2,所以访问hello2将会执行hello2方法

      $ curl 127.0.0.1:8080/hello2
      hello2
    4. 字符模糊匹配

      @RequestMapping(value = "/hello3/*")
      public Object hello3() {
          return "hello3";
      }

      说明:上面将value设置为/hello3/*,*为匹配所有字符,也就是访问hello3下的所有URL都将匹配该防范

      $ curl 127.0.0.1:8080/hello3/user
      hello3
       curl 127.0.0.1:8080/hello3/1
      hello3
    5. 单字符模糊匹配

      $ curl 127.0.0.1:8080/hello4/1
      hello4

      说明:上面将value设置为/hello4/?,?为匹配单个字符,匹配hello4/1,但是不会匹配hello4/11

      $ curl 127.0.0.1:8080/hello4/1
      hello4
      $ curl 127.0.0.1:8080/hello4/12
      {"timestamp":"2018-07-25T05:29:39.105+0000","status":404,"error":"Not Found","message":"No message available","path":"/hello4/12"}
    6. 全路径模糊匹配

      @RequestMapping(value = "/hello5/**")
      public Object hello5() {
          return "hello5";
      }

      说明:上面将value设置为/hello5/**,**为匹配所有路径,所以hello5下面的所有路由都将匹配这个方法

      $ curl 127.0.0.1:8080/hello5
      hello5
      $ curl 127.0.0.1:8080/hello5/user/1
      hello5
    7. 多个路径匹配

      @RequestMapping(value = {"/hello6", "/hello6/1"})
      public Object hello6() {
          return "hello6";
      }
      $ curl 127.0.0.1:8080/hello6
      hello6
      $ curl 127.0.0.1:8080/hello6/1
      hello6F
    8. 读取配置

      // resources/application.properties
      
      app.name=hello7
      
      // com.lyxxxx.rest.controller.HelloController
      
      @RequestMapping(value = "${app.name}")
      public Object hello7() {
          return "hello7";
      }
      $ curl 127.0.0.1:8080/hello7
      hello7

    0x003 方法匹配

    匹配请求中的method,写在RequestMethod中的枚举值:

    package com.lyxxxx.rest.controller;
    
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RequestMethod;
    import org.springframework.web.bind.annotation.RestController;
    
    @RestController
    public class MethodController {
        @RequestMapping(path = "method/get", method = RequestMethod.GET)
        public Object get() {
            return "get";
        }
    
        @RequestMapping(path = "method/head", method = RequestMethod.HEAD)
        public Object head() {
            return "head";
        }
    
        @RequestMapping(path = "method/post", method = RequestMethod.POST)
        public Object post() {
            return "post";
        }
    
        @RequestMapping(path = "method/put", method = RequestMethod.PUT)
        public Object put() {
            return "put";
        }
    
        @RequestMapping(path = "method/patch", method = RequestMethod.PATCH)
        public Object patch() {
            return "patch";
        }
    
        @RequestMapping(path = "method/delete", method = RequestMethod.DELETE)
        public Object delete() {
            return "delete";
        }
    
        @RequestMapping(path = "method/options", method = RequestMethod.OPTIONS)
        public Object options() {
            return "options";
        }
    
        @RequestMapping(path = "method/trace", method = RequestMethod.TRACE)
        public Object trace() {
            return "trace";
        }
    
    
    }
    $ curl -X GET  127.0.0.1:8080/method/get
    get
    $ curl -X POST 127.0.0.1:8080/method/post
    post
    $ curl -X DELETE 127.0.0.1:8080/method/delete
    delete
    $ curl -X PUT 127.0.0.1:8080/method/put
    put
    ...

    0x003 params 匹配

    除了可以匹配URLmethod之外,还可以匹配params

    package com.lyxxxx.rest.controller;
    
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RestController;
    
    @RestController
    public class ParamsController {
        @RequestMapping(path = "/params", params = "userId=1")
        public Object params() {
            return "params";
        }
    }
    $ curl 127.0.0.1:8080/params?userId=1
    params

    0x004 说明

    以上参考数据:《Spring Boot2精髓 从构建小系统到架构分部署大系统》

    相关文章:

    mybatis入门基础(四)----输入映射和输出映射

    django中“url映射规则”和“服务端响应顺序”

    相关视频:

    CSS3 入门教程

    以上就是怎么将某个http请求映射到某个方法上?SpringBoot入门:URL 映射的详细内容,更多请关注php中文网其它相关文章!

    声明:本文原创发布php中文网,转载请注明出处,感谢您的尊重!如有疑问,请联系admin@php.cn处理
    专题推荐:springboot java
    上一篇:图文详解JAVA虚拟机相关知识——JVM内存模型 下一篇:使用 Docker 的容器技术布局服务架构体系DevOps - JAVA架构
    大前端线上培训班

    相关文章推荐

    • 理解java8中java.util.function.*pojo反射新方法(附代码)• 浅析安卓app和微信授权登录及分享完整对接(代码分享)• 教你一招搞定时序数据库在Spring Boot中的使用• 一招教你使用java快速创建Map(代码分享)• PlayFramework 完整实现一个APP(十一)

    全部评论我要评论

  • 取消发布评论发送
  • 1/1

    PHP中文网