摘要:概述將某個請求映射到某個方法上這個注解可以加在某個或者某個方法上,如果加在上,則這個中的所有路由映射都將會加上這個前綴下面會有栗子,如果加在方法上,則沒有前綴下面也有栗子。
0x000 概述
將某個http請求映射到某個方法上
0x001 @RequestMapping這個注解可以加在某個Controller或者某個方法上,如果加在Controller上,則這個Controller中的所有路由映射都將會加上這個前綴(下面會有栗子),如果加在方法上,則沒有前綴(下面也有栗子)。
@RequestMapping有以下屬性
value: 請求的URL的路徑
path: 和value一樣
method: 請求的方法
consumes: 允許的媒體類型,也就是Content-Type
produces: 相應的媒體類型,也就是Accept
params: 請求參數
headers: 請求頭部
0x002 路由匹配
首先編寫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 HelloController { }
添加方法,并添加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
精確匹配
@RequestMapping(value = "/hello2") public Object hello2() { return "hello2"; }
說明:上面將value設置為hello2,所以訪問hello2將會執行hello2方法
$ curl 127.0.0.1:8080/hello2 hello2
字符模糊匹配
@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
單字符模糊匹配
$ 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"}
全路徑模糊匹配
@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
多個路徑匹配
@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
讀取配置
// resources/application.properties app.name=hello7 // com.lyxxxx.rest.controller.HelloController @RequestMapping(value = "${app.name}") public Object hello7() { return "hello7"; }
0x003 方法匹配$ curl 127.0.0.1:8080/hello7 hello7
匹配請求中的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 匹配
除了可以匹配URL和method之外,還可以匹配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 params0x004 header 匹配
@RestController public class HeaderController { @RequestMapping(path = "/headers", headers = "userId=1") public Object headers() { return "headers"; } }
$ curl 127.0.0.1:8080/headers {"timestamp":"2018-08-01T06:11:40.037+0000","status":404,"error":"Not Found","message":"No message available","path":"/headers"} $ curl 127.0.0.1:8080/headers -H "userId:1" headers0x005 consumes 匹配
@RestController public class ConsumesController { @RequestMapping(value = "consumes",consumes = "application/json") public Object json() { return "consumes"; } }
$ curl 127.0.0.1:8080/consumes -H "Content-Type:application/json" consumes $ curl 127.0.0.1:8080/consumes -H "Content-Type:none" {"timestamp":"2018-08-01T06:15:10.919+0000","status":415,"error":"Unsupported Media Type","message":"Invalid mime type "none": does not contain "/"","path":"/consumes"}0x006 produces 匹配
@RestController public class ProducesController { @RequestMapping(value = "/produces", produces = MediaType.APPLICATION_JSON_UTF8_VALUE) public Object produces() { return "produces"; } }
$ curl 127.0.0.1:8080/produces produces $ curl 127.0.0.1:8080/produces -H "Accept:text" // 空0x007 說明
以上參考數據:《Spring Boot2精髓 從構建小系統到架構分部署大系統》
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/76491.html
摘要:創建項目創建一個項目選擇填寫,這兩個可以組合成,一般是項目域名倒置,是項目名,然后由這兩個組合成主包名。等待初次導包結束查看創建一個最簡單的服務并測試添加一個打開,并點擊運行使用自帶服務自帶測試,或者其他任意工具,看到返回就成功了 0x001 創建項目 創建一個項目showImg(https://segmentfault.com/img/bVbeaIU?w=777&h=482); ...
摘要:本博客貓叔的博客,轉載請申明出處本系列教程為項目附帶。歷史文章如何在安裝最新版安裝安裝最新版的入門教程的入門教程安裝教程安裝流程安裝如果不清楚是什么,請查看的文檔和簡介,這里給出的安裝過程安裝虛擬機如果有遠程服務器的,請略過此步驟本文推 本博客 貓叔的博客,轉載請申明出處本系列教程為HMStrange項目附帶。 Auth:HMStrange-TIAN e-mail:zhangqihao...
摘要:小時學會學習總結時間年月日星期六說明本文部分內容均來自慕課網。慕課網教學示例源碼暫無。數據庫操作下第六章事務管理事務管理只有查詢的時候不加事務,其它任何操作都要加事務。第七章課程回顧課程回顧總結介紹安裝配置的使用數據庫操作 《2小時學會SpringBoot》學習總結 時間:2017年2月18日星期六說明:本文部分內容均來自慕課網。@慕課網:http://www.imooc.com教學示...
閱讀 645·2021-09-22 10:02
閱讀 6400·2021-09-03 10:49
閱讀 571·2021-09-02 09:47
閱讀 2156·2019-08-30 15:53
閱讀 2934·2019-08-30 15:44
閱讀 907·2019-08-30 13:20
閱讀 1821·2019-08-29 16:32
閱讀 895·2019-08-29 12:46