ホームページ  >  記事  >  Java  >  http リクエストをメソッドにマッピングするにはどうすればよいですか? SpringBoot の概要: URL マッピング

http リクエストをメソッドにマッピングするにはどうすればよいですか? SpringBoot の概要: URL マッピング

php是最好的语言
php是最好的语言オリジナル
2018-07-27 10:24:025797ブラウズ

0x000 概要: http リクエストをメソッドにマップします。 0x001 @RequestMapping: このアノテーションは、コントローラーまたはメソッドに追加できます。コントローラーに追加する場合

0x000 概要

http リクエストをメソッドにマップしますhttp请求映射到某个方法上

0x001 @RequestMapping

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

@RequestMapping有以下属性

  • value: 请求的URL的路径

  • path: 和value一样

  • method: 请求的方法

  • consumes: 允许的媒体类型,也就是Content-Type

  • produces: 相应的媒体类型,也就是Accept

  • params: 请求参数

  • headers: 请求头部

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中的枚举值:

  • GET

  • HEAD

  • POST

  • PUT

  • PATCH

  • DELETE

  • OPTIONS

  • TRACE

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

0x001 @RequestMapping<h3></h3>このアノテーションは、特定の <code>Controller またはメソッドに追加できます。Controller に追加された場合、このアノテーションは、Controller 内のすべてのルート マッピングになります。 code> がこのプレフィックスとともに追加されます (下に栗があります)。メソッドに追加された場合、プレフィックスはありません (下に栗があります)。

@RequestMapping には次の属性があります

0x002 ルートマッチング🎜
  1. 🎜最初に Controllerを書き込みます> 、Controller ヘッダーの @RestController は、このコントローラーを Rest コントローラーとしてマークします: 🎜
    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";
        }
    }
  2. 🎜Add メソッド 、一致する URL を追加します: 🎜
    $ curl 127.0.0.1:8080/params?userId=1
    params
    🎜説明: hello という名前のメソッドが上に追加されますが、指定された属性はなく、一致します。デフォルトではすべて URL であり、メソッドは GET であるため、GET メソッドを直接使用してルートにアクセスできます🎜rrreee
  3. 🎜完全一致🎜rrreee
    🎜説明: 上記は valuehello2 に設定するため、 にアクセスします。 >hello2hello2 メソッドを実行します🎜rrreee
  4. 🎜文字あいまい一致🎜rrreee
    🎜手順:上記では、value/hello3/* に設定されており、* はすべての文字に一致します。つまり、hello3 でアクセスします。 > すべての URL はこの防止策に一致します🎜rrreee
  5. 🎜単一文字のあいまい一致🎜rrreee
    🎜: 上記はvalue
/hello4/? に設定されます。? は単一の文字に一致し、hello4/1 に一致しますが、 hello4/11 と一致しません🎜rrreee
  • 🎜完全パスあいまい一致🎜rrreee
    🎜説明: 上記は value/hello5/** に設定されており、** はすべてのパスに一致するため、hello5 の下にあるすべてのルートがこれに一致します。メソッド 🎜rrreee
  • 🎜複数のパスのマッチング🎜rrreee
    rrreee
  • 🎜設定の読み取り🎜rrreee
    rrreee
    / li>🎜0x003 メソッド マッチング🎜🎜は、リクエスト内の methodRequestMethod に記述された列挙値と一致します: 🎜
    • 🎜GET🎜
    • 🎜HEAD🎜
    • 🎜POST🎜
    • 🎜PUT🎜
    • 🎜PATCH🎜
    • 🎜DELETE code> 🎜
    • 🎜OPTIONS🎜
    • 🎜TRACE🎜
    rrreeerrreee🎜0x003 パラメータが一致しました 🎜🎜 URLmethod の一致に加えて、params とも一致します🎜rrreeerrreee🎜0x004 説明🎜🎜上記の参照データ: "Spring Boot2本質:小規模システムの構築から大規模システムの設計・導入まで』🎜🎜関連記事:🎜🎜🎜mybatis入門の基礎(4)----入力マッピングと出力マッピング🎜🎜🎜🎜「URLマッピングルール」 django の「サーバー側」応答順序」🎜🎜🎜関連ビデオ: 🎜🎜🎜CSS3 入門チュートリアル🎜🎜
  • 以上がhttp リクエストをメソッドにマッピングするにはどうすればよいですか? SpringBoot の概要: URL マッピングの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

    声明:
    この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。