SpringMVC處理請求映射路徑和接收參數

目錄

springmvc處理請求映射路徑

案例:訪問 OrderController類的pirntUser方法報錯:java.lang.IllegalStateException:映射不明確

核心錯誤信息

springmvc接收參數

一 ,常見的字符串和數字類型的參數接收方式

1.1?請求路徑的參數名和業務方法中的參數名保持一致的情況

1.2?請求路徑參數名和業務方法中參數不同名的情況

二,請求路徑傳參是實體對象時

三,請求路徑傳參的實體對象中還有實體對象

四,接收數組類型的參數

五,接收集合類型的參數

六,接收json格式的參數

6.1,json轉成實體對象

6.2,json轉成集合對象

6.3,json轉成集合對象,集合中存放的是實體對象

七,日期類型參數傳遞


springmvc處理請求映射路徑

場景:在實際的應用開發中,需要寫不同的模塊,在這些模塊中,不同的方法可能具有相同的映射路徑如 訂單模塊,用戶登錄模塊,他們在方法上映射路徑都是/user。 這就會導致無法準確找到目標方法報錯。


案例:訪問 OrderController類的pirntUser方法報錯:java.lang.IllegalStateException:映射不明確

UserController類

package controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;@Controller
public class UserController {/*在Java的Spring MVC中,如果返回的字符串在瀏覽器中顯示為亂碼(如三個問號),通常是因為響應內容的字符編碼設置不正確。設為utf-81 在@RequestMapping中指定produces屬性 設置為utf-82 使用@RestController注解 默認使用utf-8編碼*/@RequestMapping(value = "/user",produces = "text/plain;charset=utf-8")@ResponseBodypublic String printloginInfo(){System.out.println("打印登錄用戶信息。。。。");return "打印登錄用戶信息。。。。。";}
}

OrderController類

package controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
@Controller
public class OrderController {@RequestMapping(value = "/user", produces = "text/plain;charset=utf-8")@ResponseBodypublic String pirntUser(){System.out.println("打印訂單中顧客信息。。。。");return "正在打印訂單中顧客信息....";}
}

測試:報500服務器內部錯誤!

核心錯誤信息

/*
原因:java.lang.IllegalStateException:映射不明確。無法映射“userController”方法
控制器。用戶控制器#登錄(字符串,String)
對于{[/user],生成[text/plain;charset=utf-8]}:已經存在'orderController'bean方法
*/
Caused by: java.lang.IllegalStateException: Ambiguous mapping. Cannot map 'userController' method?
controller.UserController#login(String, String)
to { [/user], produces [text/plain;charset=utf-8]}: There is already 'orderController' bean method

解決辦法:在controller類上使用@RequestMapping("類路徑"),進一步區分不同模塊的方法

這里在OrderController類上,添加一級目錄,進一步完善對方法的訪問

注意:我把寫在類上的@RequestMapping 稱為 “一級目錄”;寫在方法上的稱為“二級目錄”

測試:

訪問OrderController類的方法成功!

訪問UserController類方法成功!


springmvc接收參數

一下案例,皆使用Apifox,模擬請求發送


一 ,常見的字符串和數字類型的參數接收方式

1.1?請求路徑的參數名和業務方法中的參數名保持一致的情況

案例

測試結果


1.2?請求路徑參數名和業務方法中參數不同名的情況

大家,請看,如果修改請求參數名,當請求參數與映射參數不一致時,就會報錯!

測試


解決辦法:使用@RequestParam 注解,寫在參數上

@RequestParam:給映射參數寫別名

測試

二,請求路徑傳參是實體對象時

場景1?:訪問printUser1方法返回user對象

在這一個過程中,我出現的問題(可選):

1 一直無法將user對象轉成json格式

1.1 添加json格式依賴

1.2 springmvc 消息轉成器 配置類

1.3 在springmvc配置類中加載config所在包

1.4 在RequestMapping注解 要求user對象使用json格式

----------解決:springmvc工程 響應時,將實體類對象 轉換成json格式數據-CSDN博客


User實體類

使用Apifox發送請求

//傳遞對象@RequestMapping(value = "/user2", produces = "application/json")public User printUser1(User user) {System.out.println(user);return user;}

測試


三,請求路徑傳參的實體對象中還有實體對象

    // 傳遞 對象嵌套@RequestMapping("/user3")public User printUser2(User user) {System.out.println(user);return user;}

測試


四,接收數組類型的參數

  // 傳遞數組@RequestMapping("/user4")public String printUser3(String[] name) {for (String s : name) {System.out.println(s);}return "success";}

測試


五,接收集合類型的參數

    //傳遞集合@RequestMapping("/user5")public String printUser4(@RequestParam List<String> name){for (String s : name) {System.out.println(s);}return "success";}

測試


六,接收json格式的參數

須知:客戶端向服務器,發送數據都是以json格式傳遞的

如果要使用json格式接收請求參數要求:

1 引用json格式依賴

<!-- Jackson核心庫 --><dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-core</artifactId><version>2.13.0</version></dependency><!-- Jackson數據綁定庫 --><dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-databind</artifactId><version>2.13.4.2</version></dependency>

2 使用@EnableWebMvc 注解,開啟json?

3在controller類方法上使用@RequestBody注解

@RequestBody注解作用

1 將json數據實現對實體類對象的轉換


6.1,json轉成實體對象
//json格式傳遞對象@RequestMapping("/user6")public User printUser5(@RequestBody User user){System.out.println(user);return user;}

測試


6.2,json轉成集合對象
//json格式傳遞集合@RequestMapping("/user7")public String printUser6(@RequestBody List<String> name){for (String s : name) {System.out.println(s);}return "success";}

測試


6.3,json轉成集合對象,集合中存放的是實體對象
//json格式對象嵌套傳遞@RequestMapping("/user8")public User printUser7(@RequestBody User user) {System.out.println(user);return user;}


七,日期類型參數傳遞

當日期類型的格式是年/月/日這種時,只需要用Date類對象接收就可以了,

但是當格式是年-月-日這種時,就需要用注解@DateTimeFormat(pattern = "yyyy-MM-dd")來進行處理才不會報錯。具體案例看下圖:

總結

@DateTimeFormat注解作用:將傳入的字符串參數轉換為 Date 類型

按照指定格式輸出 Date 對象,就得運用 SimpleDateFormat 類來進行格式化


    @RequestMapping("/user9")public String printUser8(Date date1,@DateTimeFormat(pattern = "yyyy-MM-dd")Date date2, @DateTimeFormat(pattern = "yyyy/MM/dd HH:mm:ss") Date date3) {System.out.println("date1"+date1);System.out.println("date2"+date2);System.out.println("date3"+date3);return "success"+date1+date2+date3;

測試

控制臺輸出:

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

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

相關文章

在 Windows 系統上升級 Node.js

一、查詢電腦端已經安裝的 Node.js 版本 1、通過【winR】 鍵&#xff0c;輸入 cmd&#xff0c;點擊【確定】按鈕打開 cmd 窗口 2、命令行界面輸入 node -v 查看目前 Node.js 版本 3、命令行界面輸入 npm -v 查看目前 npm 版本 二、進入官網地址下載安裝包 1、官網地址&#x…

深入詳解人工智能數學基礎——概率論中的馬爾可夫鏈蒙特卡洛(MCMC)采樣

?? 博主簡介:CSDN博客專家、CSDN平臺優質創作者,高級開發工程師,數學專業,10年以上C/C++, C#, Java等多種編程語言開發經驗,擁有高級工程師證書;擅長C/C++、C#等開發語言,熟悉Java常用開發技術,能熟練應用常用數據庫SQL server,Oracle,mysql,postgresql等進行開發應用…

C++ 嵌套類 (詳解 一站式講解)

目錄 嵌套類 嵌套類的定義 嵌套類結構的訪問權限 pimpl模式&#xff08;了解&#xff09; 嵌套類 嵌套類的定義 首先介紹兩個概念&#xff1a; 類作用域&#xff08;Class Scope&#xff09; 類作用域是指在類定義內部的范圍。在這個作用域內定義的成員&#xff08;包括…

tcp 和http 網絡知識

1. 請簡述TCP和HTTP的定義與基本概念 TCP&#xff1a;即傳輸控制協議&#xff08;Transmission Control Protocol&#xff09;&#xff0c;是一種面向連接的、可靠的、基于字節流的傳輸層通信協議。它為互聯網中的數據通信提供穩定的傳輸機制&#xff0c;在不可靠的IP層之上&a…

MySQL安裝的多個組件中無用組件卸載

在決定卸載MySQL的哪些組件前&#xff0c;需根據你的實際使用場景判斷。以下是各組件的主要功能及卸載建議&#xff1a; 1. 核心組件卸載建議 組件名稱作用是否可卸載MySQL Server數據庫服務核心&#xff0c;存儲數據、處理SQL請求的核心程序。不可卸載 &#xff08;卸載會導致…

CosyVoice 技術全景解析:下一代語音生成模型的革命性突破

目錄 一、CosyVoice 模型概述 1. 背景與定位 二、技術架構與創新 1. 核心架構設計 2. 關鍵技術亮點 三、行業地位與競品對比 1. 市場定位分析 2. 競爭優勢 四、部署方案與硬件成本 1. 硬件需求 2. 優化技巧 五、優勢與挑戰 1. 核心優勢 2. 主要挑戰 六、開源生態…

rabbitmq-集群部署

場景&#xff1a;單個pod&#xff0c;部署在主節點&#xff0c;基礎版沒有插件&#xff0c;進階版多了一個插件 基礎版本&#xff1a; --- apiVersion: v1 kind: PersistentVolume metadata:name: rabbitmq-pv spec:capacity:storage: 5GiaccessModes:- ReadWriteOncestorage…

[密碼學實戰]商用密碼產品密鑰體系架構:從服務器密碼機到動態口令系統

[密碼學實戰]商用密碼產品密鑰體系架構:從服務器密碼機到動態口令系統 關鍵詞:商用密碼、密鑰體系、服務器密碼機、金融數據密碼機、動態口令、智能密碼鑰匙 摘要:本文深度解讀商用密碼產品的核心密鑰體系架構,涵蓋服務器密碼機、金融數據密碼機、VPN產品、動態口令系統及…

【unity游戲開發入門到精通——UGUI】UI事件監聽接口

注意&#xff1a;考慮到UGUI的內容比較多&#xff0c;我將UGUI的內容分開&#xff0c;并全部整合放在【unity游戲開發——UGUI】專欄里&#xff0c;感興趣的小伙伴可以前往逐一查看學習。 文章目錄 前言1、什么是UGUI事件接口&#xff1f;2、想要監聽事件步驟 一、事件接口1、U…

Spark知識總結

寬窄依賴&#xff1a;父RDD的分區只對應下面子RDD的一個分區&#xff0c;為窄依賴。其余為寬依賴 維度??窄依賴??寬依賴?數據傳輸無shuffle&#xff0c;本地處理14需shuffle&#xff0c;跨節點傳輸14并行度高&#xff08;允許流水線并行&#xff09;57低&#xff08;需等…

銘記之日(3)——4.28

銘記之日(3)——4.28 25.4.28&#xff0c;絕對是繼20.12.19與24.6.26之后&#xff0c;又一個被釘在恥辱柱上的日子。 4.28本質上為12.19的嚴重惡劣版。 道德敗壞、惡劣的大騙子終于在今日穿幫落馬。 斯文面孔下&#xff0c;竟藏匿了如此罪惡幽暗混沌的內心。 24.10.20&…

第16節:傳統分類模型-支持向量機(SVM)在圖像分類中的應用

一、引言 支持向量機(Support Vector Machine, SVM)作為一種經典的機器學習算法&#xff0c;自20世紀90年代由Vapnik等人提出以來&#xff0c;在模式識別和分類任務中表現出卓越的性能。 在深度學習興起之前&#xff0c;SVM長期占據著圖像分類領域的主導地位&#xff0c;即使…

《系統分析師-第三階段—總結(六)》

背景 采用三遍讀書法進行閱讀&#xff0c;此階段是第三遍。 過程 本篇總結第11章第12章的內容 第11章 第12章 總結 軟件架構設計是宏觀&#xff0c;基本架構確定之后&#xff0c;開始了系統化設計&#xff0c; 系統設計中對應的基本部分的知識較多&#xff0c;基礎知識是第…

new的使用

上次堆區的介紹中&#xff0c;我們提到了一個關鍵字new&#xff0c;那今天我們就詳細講講它 今天我們主要將兩個內容 1.new的基本語法 2.用new創建數組 1.new的基本語法 new,可以在堆區中創建空間&#xff0c;來存放數據&#xff0c;就比如像下面這樣 int* p new int(29);//n…

使用python實現自動化拉取壓縮包并處理流程

使用python實現自動化拉取壓縮包并處理流程 實現成果展示使用說明 實現成果展示 使用說明 執行./run.sh 腳本中的內容主要功能是&#xff1a; 1、從遠程服務器上下拉制定時間更新的數據 2、將數據中的zip拷貝到指定文件夾內 3、解壓后刪除所有除了lcm之外的文件 4、新建一個ou…

香橙派打包qt文件報錯“xcb 插件無法加載”與“QObject::moveToThread”線程錯誤的解決方案

PyQt 報錯總結&#xff1a;打包文件過程&#xff0c;“xcb 插件無法加載”與“QObject::moveToThread”線程錯誤的解決方案全解析 在使用 PyQt5 搭建圖形界面時&#xff0c;打包文件的過程中出現的問題&#xff0c;真難繃&#xff0c;搞了半天。 Qt 平臺插件 xcb 無法加載QOb…

Missashe考研日記-day29

Missashe考研日記-day29 1 專業課408 學習時間&#xff1a;3h學習內容&#xff1a; 今天先是把虛擬存儲剩余的課聽完了&#xff0c;然后就是做課后選擇題&#xff0c;57道&#xff0c;已經接受了OS課后題尤其多的事實了。解決并且理解完習題之后就開始預習文件管理的內容&…

【Linux】第十二章 安裝和更新軟件包

目錄 1. 什么是RPM&#xff1f; 2. dnf是什么&#xff0c;它和rpm有什么聯系和區別&#xff1f; 3. RHEL 中如何做才能啟用對第三方存儲庫的支持&#xff1f; 4. 怎么理解RHEL9中的應用流(Application Streams)和模塊(Modules)&#xff1f; 5. RHEL9 有兩個必要的軟件存儲…

新時代下的存儲過程開發實踐與優化

隨著現代應用系統的復雜度不斷增加&#xff0c;數據庫作為核心的數據存儲和處理引擎&#xff0c;其性能和可靠性顯得尤為重要。存儲過程&#xff08;Stored Procedure&#xff09;作為一種封裝在數據庫中的應用邏輯&#xff0c;使得開發者能夠在數據庫層面實現數據操作、數據校…

從梯度消失到百層網絡:ResNet 是如何改變深度學習成為經典的?

自AlexNet贏得2012年ImageNet競賽以來&#xff0c;每個新的獲勝架構通常都會增加更多層數以降低錯誤率。一段時間內&#xff0c;增加層數確實有效&#xff0c;但隨著網絡深度的增加&#xff0c;深度學習中一個常見的問題——梯度消失或梯度爆炸開始出現。 梯度消失問題會導致梯…