一、前言
RequestMapping 是開發專案常用的annotation。可以說必用到的。
這RequestMapping annotation,是用來對應請求的URI來決定要執行哪個方法。
如請求 http://localhost:8080/books 而這/books 就是要執行的方向。
而RequestMapping annotation 就是宣告當請求為/Books時,在這裡執行該程式。
二、基本使用
基本使用@RequestMapping("/books") 。
@RequestMapping("/books") 等於@RequestMapping(value="/books") 也等於 @RequestMapping(path="/books")。
而@RequestMapping("/books") 如果你沒設定參數名稱,Spring自動存入value。
另而查看原碼的value 上方會有@AliasFor的annotation。就是對應該參數方法。
如RequestMapping 有value() 跟 path()。所以這二個功能會是一樣的。
所以在Spring的框架中,有些annotation,都在 @xxxxx(這裡給值,不帶參數名稱)
例:@PathVariable("id")、@GetMapping("/books")等。
三、@RequestMapping 註解有八個屬性
name、value、path、method、consumes、produces、params、headers
name :該RequestMapping 分配一个名稱。
value、path :指定請求的實際地址,指定的地址可以是URI
method :指定請求的method型別, GET、POST、PUT、DELETE等
consumes :指定請求提交內容型別(Content-Type),例如application/json, text/html
produces :指定返回的內容型別,僅當request請求頭中的(Accept)型別中包含該指定型別才返回
params :指定request中必須包含某些參數值是,才讓該方法處理
headers :指定request中必須包含某些指定的header值,才能讓該方法處理請求
圖1 在spring-web-5.3.15.jar->org->springframework->web->bind->annotation->RequestMapping.java 可以看到相關屬性及說明
本文使用 spring-web-5.3.15.jar ,找spring-web-你的版本的.jar
四、@RequestMapping 註解屬性 value、path 程式測試及說明
本文測試:
BookController 指定為@RequestMapping("/books") ,requestMappingTest1方法指定@RequestMapping("/test1/{id}")
URI為/books/test1/XXX ->會執行BookController-> requestMappingTest1(id)
本文使用工具類:
AnnotationUtils是spring 內鍵的工具類。可以分析Annotation。
import org.springframework.core.annotation.AnnotationUtils;
在測試程式取出RequestMapping Annotation 屬性值,查看value、path值是否相同
測試:圖3 查看value、path值是否相同
五、@RequestMapping 註解屬性 method 程式測試及說明
本文測試: requestMappingTest2 方法上 設定使用 GET 才能通行。
程式:圖4
測試:圖5 使用GET 才能通行。
圖6 其它不能通行,測試POST 不能通行。
六、@RequestMapping 註解屬性 consumes 程式測試及說明
本文測試:requestMappingTest3 方法上 設定使用 POST 才能通行。
且只收JSON格式文件。
consumes 用在將 request Content-Type設定請求的型別。
用法:
consumes = "text/plain"
consumes = {"text/plain", "application/*"}
consumes = MediaType.TEXT_PLAIN_VALUE
程式:圖7 consumes 設為“application/json”型別的請求。
測試:圖8 請求時使用application/json ,結果可以成功回應
圖9 請求時使用multipart/form-data ,結果回應415
七、@RequestMapping 註解屬性 produces 程式測試及說明
本文測試:requestMappingTest4 方法上 設定使用 POST 才能通行。
且只收JSON格式文件,回應也是JSON格式文件。
produces 設定Headers 裡的Accept屬性(能夠接受的回應內容類型)。
用法:
produces = "text/plain"
produces = {"text/plain", "application/*"}
produces = MediaType.TEXT_PLAIN_VALUE
produces = "text/plain;charset=UTF-8"
程式: produces="application/json;charset=UTF-8"
application/json 設定接收/回應為JSON格式文件
charset 文件編碼為UTF-8
測試:圖11 請求時使用application/json ,結果可以成功回應json
圖12 查看回傳的Headers
圖13 請求時使用multipart/form-data ,結果回應415及查看回傳的Headers
八、@RequestMapping 註解屬性 params 程式測試及說明
本文測試: requestMappingTest5 方法上設定GET ,且需要有傳入參數name=java 才能通行。
路徑為"/test5/{id}"
用法: params 是用在限定傳入參數用的,要有該參數及值才會回應請求。
程式:
測試:
圖15 在請求Params 中帶入name=java。回應成功。
圖16 在請求Params 為空,回應失敗
九、@RequestMapping 註解屬性 headers 程式測試及說明
本文測試:requestMappingTest6 方法上 設定使用 POST 才能通行。
且只收JSON格式文件,回應也是JSON格式文件。
用法:headers 設定,將headers所有的屬型都可設定。
HTTP頭欄位參考
程式:
測試:圖18 請求時使用application/json ,結果可以成功回應json
圖19 請求時使用multipart/form-data ,結果回應415及查看回傳的Headers
十、@RequestMapping 註解屬性 name 程式測試及說明
本文測試: 將BookController 設name=dc
requestMappingTest10方法 name=test10
用法:@RequestMapping(value="/books",name="bc")
程式:
測試:需要使用jsp ,spring tags庫mvcUrl函式
圖21 測試jsp
圖22 轉為html頁面的結果
圖23 點入測試url 的測試結果
測試2:如果不設定name時,一樣可以使用tags庫mvcUrl函式取到
而類的name 預設為 類名中的大寫字母
例:Book2Controller 的name = BC
方法的name 就是方法名稱
圖24 如程式預設使用 BC#requestMappingTest10
圖25 測試jsp
圖26 轉為html頁面的結果
圖27 點入測試url 的測試結果
用LINE傳送分享
其它文章
沒有留言:
張貼留言