MethodArgumentNotValidException 與 ConstraintViolationException

MethodArgumentNotValidException?和ConstraintViolationException?都是用于處理參數校驗異常的異常類,但它們在不同的上下文中使用。

1. MethodArgumentNotValidException:
? ?- MethodArgumentNotValidException?是在 Spring MVC 或 Spring Boot 中處理參數校驗異常時拋出的異常。繼承至BindException 屬于檢測異常
? ?- 當使用注解(如 @Valid)進行參數校驗時,如果參數違反了約束條件,就會拋出 MethodArgumentNotValidException?異常。
? ?- 通常,該異常是在控制器(Controller)中接收到請求參數后發生的,它包含了關于哪個參數違反了約束條件以及相應的錯誤消息。
? ?- 可通過編寫全局異常處理器 @ExceptionHandler(MethodArgumentNotValidException.class)?來捕獲和處理此異常。

2. ConstraintViolationException:
? ?- ConstraintViolationException?是在 Java Bean Validation(JSR 380)規范中定義的一個異常類。屬于非檢查異常
? ?- 當使用注解進行參數校驗時,如果參數違反了約束條件(例如,@NotNull、@Size、@Pattern等),就會拋出 ConstraintViolationException?異常。
? ?- 該異常不局限于 Spring MVC 或 Spring Boot,可以用于任何遵循 Java Bean Validation 規范的環境。
? ?- 可通過編寫對應的異常處理器來捕獲和處理此異常。

注意:

1.對于參數校驗異常 中MethodArgumentNotValidException?無法捕獲的異常可以用 ConstraintViolationException捕獲處理

2.對于集合參數List<Object>中具體對象的屬性校驗一般情況下MethodArgumentNotValidException捕獲不了,可以用ConstraintViolationException找到是集合參數中中具體哪一個對象參數校驗失敗? 處理代碼舉例

@ResponseBody@ExceptionHandler(value = ConstraintViolationException.class)public Result<xx> doHandException(ConstraintViolationException e) {log.error("服務異常:", e);ConstraintViolationException validException = (ConstraintViolationException) e;Set<ConstraintViolation<?>> violations = validException.getConstraintViolations();// 將驗證失敗的信息轉換為自定義的錯誤信息List<String> errorMessages = new ArrayList<>();for (ConstraintViolation<?> violation : violations) {String errorMessage = violation.getPropertyPath() + ": " + violation.getMessage();errorMessages.add(errorMessage);String str = JSON.toJSONString(violation.getExecutableParameters()[0]);errorMessages.add(str);}log.error(JSON.toJSONString(errorMessages));// 構建錯誤響應return new ResponseEntity<>(Result<xx>.xxx(errorMessages.get(0)), HttpStatus.BAD_REQUEST);}

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

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

相關文章

一篇五分生信臨床模型預測文章代碼復現——Figure 10.機制及腫瘤免疫浸潤(六)

之前講過臨床模型預測的專欄,但那只是基礎版本,下面我們以自噬相關基因為例子,模仿一篇五分文章,將圖和代碼復現出來,學會本專欄課程,可以具備發一篇五分左右文章的水平: 本專欄目錄如下: Figure 1:差異表達基因及預后基因篩選(圖片僅供參考) Figure 2. 生存分析,…

windows系統玩游戲找不到d3dx9_35.dll缺失的解決方法

分享一個我們在打開游戲或許軟件過程中遇到的問題——“由于找不到d3dx9_35.dll,無法繼續執行代碼”的五個修復方案。這個問題可能會影響到我們的工作和娛樂效率&#xff0c;甚至可能導致工作的延期。因此&#xff0c;我希望通過今天的文章&#xff0c;能夠幫助大家更好地解決這…

電大搜題——打開學習之門的最佳選擇

在快節奏的現代社會&#xff0c;追求知識和學習成為愈發重要的需求。然而&#xff0c;許多人由于時間和機會的限制&#xff0c;無法實現自己的教育夢想。就在這個時候&#xff0c;安徽開放大學廣播電視大學通過推出電大搜題微信公眾號&#xff0c;為廣大學子提供了一個便捷高效…

別低頭,皇冠會掉;別流淚,賤人會笑。

別低頭&#xff0c;皇冠會掉&#xff1b;別流淚&#xff0c;賤人會笑。

從零開始學習typescript——類型轉換

類型轉換 在開發中&#xff0c;你有沒有遇見一種情況 let obj{displayNum:"" } obj.displayNum“123”; let num:number 123 console.log(numobj.displayNum) //false我們想要的結果&#xff0c;是結果為true;那么這時候就要用到類型轉換 將其他類型轉換為布爾類型…

18.天氣小案例

1?新增帶Layout組件的頁面 直接在views文件夾下面新增weather.vue。然后隨便寫一個123&#xff0c;現在先讓我們頁面能跳過去先。 讓頁面能跳過去&#xff0c;有好幾種方法&#xff1a; 1、在菜單管理自己添加一個菜單&#xff0c;然后把菜單分配給某個角色&#xff0c;再把…

詳解StringBuilder和StringBuffer(區別,使用方法,含源碼講解)

目錄 一.為什么要使用StringBuilder和StringBuffer 字符串的不可變性 性能損耗 二.StringBuilder和StringBuffer StringBuffer源碼講解 使用方式 三.常用方法總結 示例&#xff1a; 四.StringBuilder和StringBuffer的區別 一.為什么要使用StringBuilder和StringBuffe…

C語言--每日五道選擇題-- Day22

第一題&#xff08;注意&#xff09; 1.下列 C 代碼中&#xff0c;不屬于未定義行為的有&#xff1a;______。 A&#xff1a;int i0; i(i); B&#xff1a;char *p"hello"; p[1]E; C&#xff1a;char *p"hello"; char ch*p; D&#xff1a;int i0; printf(&q…

Redis7--基礎篇3(持久化)

持久化介紹 官網地址&#xff1a; https://redis.io/docs/manual/persistence RDB(Redis DataBase)AOF(Append Only File)RDB AOF RDB模式(Redis DataBase) RDB 持久性以指定的時間間隔執行數據集的時間點快照。 實現類似照片記錄效果的方式&#xff0c;就是把某一時刻的數據…

計算機組成原理(萬字爆肝整理)

第一章 計算機系統概述 “較簡單&#xff0c;不做過多贅述&#xff0c;后面會詳細學到” 第一節 計算機系統層次結構 1.計算機系統的基本組成&#xff1a;硬件軟件 2.計算機硬件的基本組成&#xff1a;運算器存儲器控制器輸入設備輸出設備 3.系統軟件和應用軟件 系統軟件…

expdp導出分區表緩慢排查(Streams AQ: waiting for messages in the queue )

基本信息 單機&#xff0c;從老環境遷移到19.19。之前的導出速度接受范圍內。硬件是提升的 導出使用了壓縮&#xff0c;加密&#xff0c;并行64進程&#xff0c;表分區約90個&#xff0c;無lob字段。 現象 導出開始時能并行導出&#xff08;并行約45個&#xff0c;沒起到64…

Cypress環境變量

Cypress環境變量 baseUrl 當你配置了 baseUrl &#xff0c;測試套件中的 cy.visit() 、 cy.request() 都會自動以 baseUrl 的值作為前綴并且&#xff0c;當你需要訪問某些網址或者發起接口請求時&#xff0c;在代碼中就可以不用再指定請求的 host 或者 url 了 如何配置 base…

Java進階——多線程相關,實際應用中的積累,持續更新

目錄 多線程相關CountDownLatch賽跑的案例countDownLatch.await(300, TimeUnit.SECONDS); Java其他進階Map的put方法只放一個元素的集合 多線程相關 CountDownLatch 案例&#xff1a;主線程的執行需要等待子線程執行完&#xff0c;等各個線程執行完畢后&#xff0c;主線程做收…

redis的高可用(主從復制和哨兵模式)

redis的高可用&#xff08;主從復制和哨兵模式&#xff09; redis的性能管理&#xff1a;redis的數據緩存在內存當中 INFO memory&#xff1a;查看redis內存使用情況 used_memory:1800800&#xff1a;redis中數據占用的內存 used_memory_rss:5783552&#xff1a;redis向操作…

Halcon Solution Guide I basics(3): Region Of Interest(有興趣區域/找重點)

文章目錄 文章專欄前言文章解讀前言創建ROI案例1&#xff1a;直接截取ROI手動截取ROI 總結ROI套路獲取窗口句柄截取ROI區域獲取有效區域 Stop組合 文章專欄 Halcon開發 Halcon學習 練習項目gitee倉庫 CSDN Major 博主Halcon文章推薦 前言 今天來看第三章內容&#xff0c;既然是…

QTableWidget——編輯單元格

文章目錄 前言熟悉QTableWiget&#xff0c;通過實現單元格的合并、拆分、通過編輯界面實現表格內容及屬性的配置、實現表格的粘貼復制功能熟悉QTableWiget的屬性 一、[單元格的合并、拆分](https://blog.csdn.net/qq_15672897/article/details/134476530?spm1001.2014.3001.55…

Docker實踐筆記7:構建MySQL 8鏡像

使用Docker構建MySQL 8鏡像并運行容器 本教程將指導您使用Dockerfile構建和運行一個MySQL 8容器。讓我們開始吧&#xff01; 步驟1&#xff1a;創建Dockerfile 在您的項目根目錄下創建一個名為Dockerfile的文件。以下是Dockerfile的示例內容&#xff1a; # 基于最新的MySQL…

docker、elasticsearch8、springboot3集成備忘

目錄 一、背景 二、安裝docker 三、下載安裝elasticsearch 四、下載安裝elasticsearch-head 五、springboot集成elasticsearch 一、背景 前兩年研究了一段時間elasticsearch&#xff0c;當時也是網上找了很多資料&#xff0c;最后解決個各種問題可以在springboot上運行了…

vue-使用input封裝上傳文件圖片全局組件

前言 實際開發過程中&#xff0c;我們經常遇見需要上傳文件圖片功能&#xff0c;可以封裝一個全局組件來調用 原理很簡單&#xff0c;首先獲取到文件或圖片對象&#xff0c;調用自己公司文檔服務器的接口&#xff0c;上傳文件圖片 為了方便用戶體驗&#xff0c;我們應該在上傳…

Godot

前言 為什么要研究開源引擎 主要原因有&#xff1a; 可以享受“信創”政策的紅利&#xff0c;非常有利于承接政府項目。中美脫鉤背景下&#xff0c;國家提出了“信創”政策。這個政策的核心就是&#xff0c;核心技術上自主可控。涉及的產業包括&#xff1a;芯片、操作系統、數據…