@RequestMapping屬性詳解及案例演示

@RequestMapping源碼

@Target({ElementType.TYPE, ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Mapping
public @interface RequestMapping {String name() default "";@AliasFor("path")String[] value() default {};@AliasFor("value")String[] path() default {};RequestMethod[] method() default {};String[] params() default {};String[] headers() default {};String[] consumes() default {};String[] produces() default {};}

?通過 @RequestMapping 源碼,我們得知可以配置以下屬性:

  • name
  • value(path)
  • method
  • params
  • headers
  • consumes
  • produces

name

映射的名稱

名稱可以指定也可以不指定,規則如下:

  • 指定:配置的映射名
  • 未指定:類名中的大寫字母 + # + 方法名
效果演示
創建Controller
@RestController
@RequestMapping("/mapping")
public class MappingController {@GetMapping(value = "/default_name")public String defaultName() {return "default_name";}@GetMapping(value = "/custom_name", name = "MappingController#customName")public String customName() {return "custom_name";}}
AbstractHandlerMethodMapping#lookupHandlerMethod

value(path)

請求路徑

如果類和方法上都存在?@RequestMapping 注解,請求路徑 = 類上配置的path + 方法上配置的path

配置多個請求路徑

我們可以讓多個請求路徑,映射到同一個接口方法

案例演示
@GetMapping(value = {"/p1", "/p2"})
public String multiPath() {return "multiPath";
}

添加前綴

我們也可以添加配置,使得特定 Controller 的請求路徑需要添加前綴,這時候 請求路徑 = 前綴 +?類上配置的path + 方法上配置的path

案例演示
創建配置類
@Configuration
public class MappingConfig implements WebMvcConfigurer {@Overridepublic void configurePathMatch(PathMatchConfigurer configurer) {configurer.addPathPrefix("/custom", type -> type.isAssignableFrom(MappingController.class));}
}
請求 /mapping/p1 拋出 404 異常

請求 /custom/mapping/p2?正常映射

支持Spel表達式
創建 keys.properties
key=a
引用keys.properties
@SpringBootApplication
@PropertySource("classpath:keys.properties")
public class BootApplication {public static void main(String[] args) {SpringApplication.run(BootApplication.class);}
}
?接口及響應
@GetMapping(value = {"${key}"})
public String spel() {return "spel";
}

method

請求方法

@GetMapping@PostMapping@PutMapping@DeleteMapping 等注解都是?@RequestMapping 注解的封裝

  • @GetMapping ==> @RequestMapping(method = RequestMethod.GET)
  • @PostMapping ==> @RequestMapping(method = RequestMethod.POST)
  • @PutMapping ==>?@RequestMapping(method = RequestMethod.PUT)
  • @DeleteMapping ==>?@RequestMapping(method = RequestMethod.DELETE)

params

The parameters of the mapped request, narrowing the primary mapping.
Same format for any environment: a sequence of "myParam=myValue" style expressions, with a request only mapped if each such parameter is found to have the given value. Expressions can be negated by using the "!=" operator, as in "myParam!=myValue". "myParam" style expressions are also supported, with such parameters having to be present in the request (allowed to have any value). Finally, "!myParam" style expressions indicate that the specified parameter is not supposed to be present in the request.

通過注釋,我們得知?Expressions 大概有以下四種形式:

  • myParam=myValue : 某個參數的值等于指定value
  • myParam!=myValue: 某個參數的值不等于指定value
  • myParam : 存在參數myParam
  • !myParam : 不存在參數myParam
案例演示
myParam=myValue
接口及響應
@GetMapping(value = "equal_value", params = {"key=1"})
public String equalValue() {return "equal value";
}
key 不存在

key 為 2

key 為 1?

key 不存在或者 value 不等于指定值則拋出異常

myParam!=myValue
接口及響應
@GetMapping(value = "not_equal_value", params = {"key!=1"})
public String notEqualValue() {return "not equal value";
}
key 不存在

key 為 2

key 為 1

key 不存在或者 value 不等于指定值正常映射,否則拋出異常

myParam
接口及響應
@GetMapping(value = "exist", params = {"key"})
public String exist() {return "exist";
}
key 為 null?

key 為 1?

key 不存在?

只要指定 key 存在就可以正常映射,不管是不是為 null

!myParam
接口及響應
@GetMapping(value = "absent", params = {"!key"})
public String absent() {return "absent";
}
?key 為 null

key 為 1

key 不存在?

只要指定 key 存在就拋出異常,不管是不是為 null

headers

The headers of the mapped request, narrowing the primary mapping.
Same format for any environment: a sequence of "My-Header=myValue" style expressions, with a request only mapped if each such header is found to have the given value. Expressions can be negated by using the "!=" operator, as in "My-Header!=myValue". "My-Header" style expressions are also supported, with such headers having to be present in the request (allowed to have any value). Finally, "!My-Header" style expressions indicate that the specified header is not supposed to be present in the request.

和 params 類似,headers也有四種形式

  • My-Header=myValue
  • My-Header!=myValue
  • My-Header
  • !My-Header

和 params 用法基本一致,這里就演示一個案例,不過多舉例

案例演示
My-Header=myValue
接口及響應
@GetMapping(value = "headers", headers = {"Custom-Header=66"})
public String headers() {return "headers";
}

consumes

Content-Type 的值必須滿足 consumes(如果不為空數組) 指定的多個值(或取反)之一

案例演示
接口及響應
@GetMapping(value = "consumes", consumes = {"text/plain", "application/json"})
public String consumes() {return "consumes";
}

PS : 如果?headers 已經對 Content-Type? 進行了限制,consumes 失效

produces

Accept 的值必須滿足(兼容) produces(如果不為空數組) 指定的多個值(或取反)之一

案例演示
接口及響應
@GetMapping(value = "produces", produces = {"text/plain", "application/json"})
public String produces() {return "produces";
}

PS : 如果?headers 已經對 Accept? 進行了限制,produces 失效

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/38472.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/38472.shtml
英文地址,請注明出處:http://en.pswp.cn/web/38472.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

智能寫作與痕跡消除:AI在創意文案和論文去痕中的應用

作為一名AI愛好者,我積累了許多實用的AI生成工具。今天,我想分享一些我經常使用的工具,這些工具不僅能幫助提升工作效率,還能激發創意思維。 我們都知道,隨著技術的進步,AI生成工具已經變得越來越智能&…

簡單分享 for循環,從基礎到高級

1. 基礎篇:Hello, For Loop! 想象一下,你想給班上的每位同學發送“Hello!”,怎么辦?那就是for循環啦, eg:首先有個名字的列表,for循環取出,分別打印 names ["Alice", …

Apache APISIX 介紹

Apache APISIX 是一個動態、實時、高性能的云原生API網關,屬于Apache軟件基金會旗下的項目。以下是對Apache APISIX的詳細介紹: 一、基本概述 定義:Apache APISIX是一個提供豐富流量管理功能的云原生API網關。功能:包括負載均衡…

git出現Permission denied問題

Warning: Permanently added ‘icode.baidu.com,10.11.81.103’ (RSA) to the list of known hosts. Permission denied (baas,keyboard-interactive,publickey). fatal: Could not read from remote repository. Please make sure you have the correct access rights and the…

nodejs操作excel文件實例,讀取sheets, 設置cell顏色

本代碼是我幫客戶做的兼職的實例,涉及用node讀取excel文件,遍歷sheets,給單元格設置顏色等操作,希望對大家接活有所幫助。 gen.js let dir"D:\\武漢煙廠\\山東區域\\備檔資料\\銷區零售終端APP維護清單\\走訪檔案\\2024年6月…

Spring之事務失效的場景

Spring事務失效的場景 異常捕獲處理:自己處理了異常,沒有拋出。解決:手動拋出拋出檢查異常:配置rollbackFor屬性為Excetion非public方法導致事務失效,改為public 1、異常捕獲處理 示例: 張三1000元&#…

7月形勢分析-您下一步該如何做,才能走出困境?

馬上工程項目,再有三五天就要結束的了。即便推后也不會超過一周時間了。所以需要考慮將來干啥呢?  一方面就是繼續去濟寧做建筑工程的活。管吃住,但是因為至親之間,難免咋說呢,總之還是不太舒服的樣子。管事情多&…

bigNumber的部分使用方法與屬性

場景:最近做IoT項目的時候碰到一個問題,涉及到雙精度浮點型的數據范圍的校驗問題。業務上其實有三種類型:int、float和double類型三種。他們的范圍分別是: //int int: [-2147483648, 2147483647],//float float: [-3402823466385…

PHP7源碼結構

PHP7程序的執行過程 1.PHP代碼經過詞法分析轉換為有意義的Token; 2.Token經過語法分析生成AST(Abstract Synstract Syntax Tree,抽象語法樹); 3.AST生成對應的opcode,被虛擬機執行。 源碼結構&#xff1…

一切為了安全丨2024中國應急(消防)品牌巡展武漢站成功召開!

消防品牌巡展武漢站 6月28日,由中國安全產業協會指導,中國安全產業協會應急創新分會、應急救援產業網聯合主辦,湖北消防協會協辦的“一切為了安全”2024年中國應急(消防)品牌巡展-武漢站成功舉辦。該巡展旨在展示中國應急(消防&am…

qt QTreeView的簡單使用(多級子節點)

MainWindow::MainWindow(QWidget *parent): QMainWindow(parent), ui(new Ui::MainWindow) {ui->setupUi(this);setWindowTitle("QTreeView的簡單使用");model new QStandardItemModel;model->setHorizontalHeaderLabels(QStringList() << "left&q…

【數據結構 - 時間復雜度和空間復雜度】

文章目錄 <center>時間復雜度和空間復雜度算法的復雜度時間復雜度大O的漸進表示法常見時間復雜度計算舉例 空間復雜度實例 時間復雜度和空間復雜度 算法的復雜度 算法在編寫成可執行程序后&#xff0c;運行時需要耗費時間資源和空間(內存)資源 。因此衡量一個算法的好壞&…

[leetcode]longest-arithmetic-subsequence-of-given-difference. 最長定差子序列

. - 力扣&#xff08;LeetCode&#xff09; class Solution { public:int longestSubsequence(vector<int> &arr, int difference) {int ans 0;unordered_map<int, int> dp;for (int v: arr) {dp[v] dp[v - difference] 1;ans max(ans, dp[v]);}return ans…

Qt源碼分析:窗體繪制與響應

作為一套開源跨平臺的UI代碼庫&#xff0c;窗體繪制與響應自然是最為基本的功能。在前面的博文中&#xff0c;已就Qt中的元對象系統(反射機制)、事件循環等基礎內容進行了分析&#xff0c;并捎帶闡述了窗體響應相關的內容。因此&#xff0c;本文著重分析Qt中窗體繪制相關的內容…

ECharts 快速入門

文章目錄 1. 引入 ECharts2. 初始化 ECharts 實例3. 配置圖表選項4. 使用配置項生成圖表5. 最常用的幾種圖形5.1 柱狀圖&#xff08;Bar Chart&#xff09;5.2 折線圖&#xff08;Line Chart&#xff09;5.3 餅圖&#xff08;Pie Chart&#xff09;5.4 散點圖&#xff08;Scatt…

如何完成域名解析驗證

一&#xff1a;什么是DNS解析&#xff1a; DNS解析是互聯網上將人類可讀的域名&#xff08;如www.example.com&#xff09;轉換為計算機可識別的IP地址&#xff08;如192.0.2.1&#xff09;的過程&#xff0c;大致遵循以下步驟&#xff1a; 查詢本地緩存&#xff1a;當用戶嘗…

Linux內核 -- 多線程之完成量completion的使用

Linux Kernel Completion 使用指南 在Linux內核編程中&#xff0c;completion是一個用于進程同步的機制&#xff0c;常用于等待某個事件的完成。它提供了一種簡單的方式&#xff0c;讓一個線程等待另一個線程完成某項任務。 基本使用方法 初始化 completion結構需要在使用之…

順序串算法庫構建

學習賀利堅老師順序串算法庫 數據結構之自建算法庫——順序串_創建順序串s1,創建順序串s2-CSDN博客 本人詳細解析博客 串的概念及操作_串的基本操作-CSDN博客 版本更新日志 V1.0: 在賀利堅老師算法庫指導下, 結合本人詳細解析博客思路基礎上,進行測試, 加入異常彈出信息 v1.0補…

已解決java.awt.geom.NoninvertibleTransformException:在Java2D中無法逆轉的轉換的正確解決方法,親測有效!!!

已解決java.awt.geom.NoninvertibleTransformException&#xff1a;在Java2D中無法逆轉的轉換的正確解決方法&#xff0c;親測有效&#xff01;&#xff01;&#xff01; 目錄 問題分析 出現問題的場景 報錯原因 解決思路 解決方法 1. 檢查縮放因子 修改后的縮放變換 …

關鍵路徑——C語言(理論)

關鍵路徑&#xff0c;是項目網絡中從起始事件到終止事件的最長路徑&#xff0c;決定了項目的最短完成時間。 關鍵路徑中的任務沒有任何可調整的余地&#xff0c;如果任何一個任務被延遲&#xff0c;整個項目的完成時間也會被延遲。 假設我們現在有一個圖&#xff1a;把圖的邊…