spring-mvc系列:詳解@RequestMapping註解(value、method、params、header等)

来源:https://www.cnblogs.com/vic-tory/archive/2023/08/03/17604792.html
-Advertisement-
Play Games

[TOC] ### 一、@RequestMapping註解的功能 從註解名稱上我們可以看到,@RequestMapping註解的作用就是將請求和處理請求的控制器方法關聯起來,建立映射關係。 SpringMVC 接收到指定的請求,就會來找到在映射關係中對應的控制器方法來處理這個請求。 ### 二、@R ...


目錄

一、@RequestMapping註解的功能

從註解名稱上我們可以看到,@RequestMapping註解的作用就是將請求和處理請求的控制器方法關聯起來,建立映射關係。

SpringMVC 接收到指定的請求,就會來找到在映射關係中對應的控制器方法來處理這個請求。

二、@RequestMapping註解的位置

@RequestMapping標識一個類:設置映射請求的請求路徑的初始信息

@RequestMapping標識一個方法:設置映射請求請求路徑的具體信息

package com.mcode.api.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;

/**
 * ClassName: RequestMappingController
 * Package: com.mcode.api.controller
 * Description:
 *
 * @Author: robin
 * @Create: 2023/8/3 - 10:32 PM
 * @Version: v1.0
 */
@Controller
@RequestMapping("/test")
public class RequestMappingController {

    //此時請求映射所映射的請求的請求路徑為:/test/testRequestMapping 
    @RequestMapping("/testRequestMapping")
    public String testRequestMapping() {
        return "success";
    }
}

三、@RequestMapping註解的value屬性

@RequestMapping註解的value屬性通過請求的請求地址匹配請求映射

@RequestMapping註解的value屬性是一個字元串類型的數組,表示該請求映射能夠匹配多個請求地址所對應的請求

@RequestMapping註解的value屬性必須設置,至少通過請求地址匹配請求映射

<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <style>
        a{
          display: block;
        }
    </style>
</head>
<body>
   <a th:href="@{/testRequestMapping}">測試@RequestMapping的value屬性-->/testRequestMapping</a>
   <a th:href="@{/test}">測試@RequestMapping的value屬性-->/test</a>
</body>
</html>
package com.mcode.api.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;

/**
 * ClassName: RequestMappingController
 * Package: com.mcode.api.controller
 * Description:
 *
 * @Author: robin
 * @Create: 2023/8/3 - 10:32 PM
 * @Version: v1.0
 */
@Controller
//@RequestMapping("/test")
public class RequestMappingController {

    @RequestMapping(value = {"test", "testRequestMapping"})
    public String testRequestMapping() {
        return "success";
    }
}

四、@RequestMapping註解的method屬性

@RequestMapping註解的method屬性通過請求的請求方式(get或post)匹配請求映射

@RequestMapping註解的method屬性是一個RequestMethod類型的數組,表示該請求映射能夠匹配多種請求方式的請求,若當前請求的請求地址滿足請求映射的value屬性,但是請求方式不滿足method屬性,則瀏覽器報錯

405:Request method 'POST' not supported

image

<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <style>
        a{
          display: block;
        }
    </style>
</head>
<body>
   <a th:href="@{/testRequestMapping}">測試@RequestMapping的value屬性-->/testRequestMapping</a>
   <a th:href="@{/test}">測試@RequestMapping的value屬性-->/test</a>
   <form th:action="@{/test}" method="post">
       <input type="submit" value="提交">
   </form>
</body>
</html>
package com.mcode.api.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;

/**
 * ClassName: RequestMappingController
 * Package: com.mcode.api.controller
 * Description:
 *
 * @Author: robin
 * @Create: 2023/8/3 - 10:32 PM
 * @Version: v1.0
 */
@Controller
//@RequestMapping("/test")
public class RequestMappingController {

    @RequestMapping(value = {"test", "testRequestMapping"},
            method = RequestMethod.GET)
    public String testRequestMapping() {
        return "success";
    }
}

註:

1、對於處理指定請求方式的控制器方法,SpringMVC中提供了@RequestMapping的派生註解

處理get請求的映射-->@GetMapping

處理post請求的映射-->@PostMapping

處理put請求的映射-->@PutMapping

處理delete請求的映射-->@DeleteMapping

2、常用的請求方式有get,post,put,delete

但是目前瀏覽器只支持get和post,若在form表單提交時,為method設置了其他請求方式的字元

串(put或delete),則按照預設的請求方式get處理

若要發送put和delete請求,則需要通過spring提供的過濾器HiddenHttpMethodFilter

五、@RequestMapping註解的params屬性

@RequestMapping註解的params屬性通過請求的請求參數匹配請求映射

@RequestMapping註解的params屬性是一個字元串類型的數組,可以通過四種表達式設置請求參數和請求映射的匹配關係

"param":要求請求映射所匹配的請求必須攜帶param請求參數

"!param":要求請求映射所匹配的請求必須不能攜帶param請求參數

"param=value":要求請求映射所匹配的請求必須攜帶param請求參數且param=value

"param!=value":要求請求映射所匹配的請求必須攜帶param請求參數但是param!=value

<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <style>
        a{
          display: block;
        }
    </style>
</head>
<body>
   <a th:href="@{/testRequestMapping}">測試@RequestMapping的value屬性-->/testRequestMapping</a>
   <a th:href="@{/test}">測試@RequestMapping的value屬性-->/test</a>
   <form th:action="@{/test}" method="post">
       <input type="submit" value="提交">
   </form>
   <a th:href="@{/test(username='admin',password=123456)}">測試@RequestMapping的params屬性-->/test</a><br>
</body>
</html>
package com.mcode.api.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;

/**
 * ClassName: RequestMappingController
 * Package: com.mcode.api.controller
 * Description:
 *
 * @Author: robin
 * @Create: 2023/8/3 - 10:32 PM
 * @Version: v1.0
 */
@Controller
//@RequestMapping("/test")
public class RequestMappingController {

    @RequestMapping(value = {"test", "testRequestMapping"},
            method = RequestMethod.GET,
            params = {"username", "password!=123456"})
    public String testRequestMapping() {
        return "success";
    }
}

註:

若當前請求滿足@RequestMapping註解的value和method屬性,但是不滿足params屬性,此時頁面回報錯400:

Parameter conditions "username, password!=123456" not met for actual

request parameters: username={admin}, password=

六、@RequestMapping註解的header屬性

@RequestMapping註解的headers屬性通過請求的請求頭信息匹配請求映射

@RequestMapping註解的headers屬性是一個字元串類型的數組,可以通過四種表達式設置請求頭信息和請求映射的匹配關係

"header":要求請求映射所匹配的請求必須攜帶header請求頭信息

"!header":要求請求映射所匹配的請求必須不能攜帶header請求頭信息

"header=value":要求請求映射所匹配的請求必須攜帶header請求頭信息且header=value

"header!=value":要求請求映射所匹配的請求必須攜帶header請求頭信息且header!=value

若當前請求滿足@RequestMapping註解的value和method屬性,但是不滿足headers屬性,此時頁面顯示404錯誤,即資源未找到

七、SpringMVC支持ant分格的路徑

?:表示任意的單個字元

@RequestMapping(value = "/a?a/testAnt")

*:表示任意的0個或多個字元

@RequestMapping("/a*a/testAnt")

**:表示任意的一層或多層目錄

@RequestMapping("/**/testAnt")

註意:在使用**時,只能使用/**/xxx的方式

八、SpringMVC支持路徑中的占位符

原始方式:/deleteUser?id=1

rest方式:/deleteUser/1

SpringMVC路徑中的占位符常用於RESTful風格中,當請求路徑中將某些數據通過路徑的方式傳輸到伺服器中,就可以在相應的@RequestMapping註解的value屬性中通過占位符{xxx}表示傳輸的數據,在通過@PathVariable註解,將占位符所表示的數據賦值給控制器方法的形參

<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <style>
        a{
          display: block;
        }
    </style>
</head>
<body>
   <a th:href="@{/testRequestMapping}">測試@RequestMapping的value屬性-->/testRequestMapping</a>
   <a th:href="@{/test}">測試@RequestMapping的value屬性-->/test</a>
   <form th:action="@{/test}" method="post">
       <input type="submit" value="提交">
   </form>
   <a th:href="@{/test(username='admin',password=123456)}">測試@RequestMapping的params屬性-->/test</a><br>
   <a th:href="@{/testRest/1/admin}">測試路徑中的占位符-->/testRest</a><br>
</body>
</html>
package com.mcode.api.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;

/**
 * ClassName: RequestMappingController
 * Package: com.mcode.api.controller
 * Description:
 *
 * @Author: robin
 * @Create: 2023/8/3 - 10:32 PM
 * @Version: v1.0
 */
@Controller
//@RequestMapping("/test")
public class RequestMappingController {
    @RequestMapping("/testRest/{id}/{username}")
    public String testRest(@PathVariable("id") String id, @PathVariable("username") String username) {
        System.out.println("id:" + id + ",username:" + username);
        return "success";
    }
}

image

QQ:359855043
您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 防抖函數和節流函數是工作中兩種常用的前端性能優化函數,今天我就來總結一下什麼是防抖和節流,並詳細說明一下如何在工作中應用防抖函數和節流函數 ...
  • ###HTML標簽 ####表格標簽 表格的主要作用: 表格主要用於**顯示、展示數據**,因為它可以讓數據顯示的非常的規整,可讀性非常好。特別是後臺展示數據的時候,能夠熟練運用表格就顯得很重要。一個清爽簡約的表格能夠把繁雜的數據表現得很有條理。 1.``用來定義表格的標簽。 2.``用來定義行的標 ...
  • 一、分支相關操作 1.創建本地分支 使用以下命令創建一個本地分支 git branch <本地分支名> 使用以下命令創建一個本地分支且新建分支從特定分支拉取代碼 git branch <本地分支名> origin/<遠程分支名 or 本地分支名> 2.創建本地分支並切換 使用以下命令創建一個本地分支 ...
  • Nuxt.js是一個基於Vue.js的通用應用框架,主要關註的是應用的UI渲染,利用Vue.js開發服務端渲染的應用所需要的各種配置。 ...
  • 問題描述:初始化渲染後 tabs的下劃線沒有居中對其,出現異位。 問題分析: 網上很多大佬分析過出現原因了 記錄下解決的過程: 在各個論壇搜集到解決方案都暫時無效 有使用v-if重新渲染的 有給類賦值偏移值的 有強行轉換px的 因為各種原因這些方法在自己身上沒有奏效所以記錄下自己解決方案 偏移問題會 ...
  • 這裡給大家分享我在網上總結出來的一些知識,希望對大家有所幫助 介紹 canvas:使用腳本 (通常為 JavaScript) 來繪製圖形的 HTML 元素。 本人遍歷了以下兩份文檔,學習完就相當於有了筆和紙,至於最後能畫出什麼,則需要在 canvas 應用方面進一步學習。 MDN 的 Canvas ...
  • 2020 年我有幸加入騰訊 tdmq 初創團隊,當時 tdmq 還正在上雲公測階段,我第一次從一個使用工具的人轉變成了開發工具的人, 這個過程使我沉澱了很多消息隊列知識與設計藝術。 後來在業務中台的實踐中,也頻繁地使用到了 MQ,比如最常見的消息推送,異常信息的重試等等, 過程中也對消息隊列有了更加 ...
  • ##### 延遲和死信隊列的配置 - 延遲隊列有效期一分鐘,後進入死信隊列,如果異常就進入異常隊列 ``` @Configuration @Data public class RabbitMQConfig { /** * 交換機 */ private String orderEventExchang ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...