日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

校验json格式_不来学一下SpringBoot统一参数校验?

發(fā)布時間:2025/3/15 42 豆豆
生活随笔 收集整理的這篇文章主要介紹了 校验json格式_不来学一下SpringBoot统一参数校验? 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
  • 微服務架構(gòu)之春招總結(jié):SpringCloud、Docker、Dubbo與SpringBoot
  • 一個SpringBoot問題就干趴下了?我卻憑著這份PDF文檔吊打面試官.
  • 金三銀四第一天,啃透這些SpringBoot知識點,還怕干不贏面試官?

前言

??在日常的開發(fā)中,參數(shù)校驗是非常重要的一個環(huán)節(jié),嚴格參數(shù)校驗會減少很多出bug的概率,增加接口的安全性。也會減少對接時不必要的溝通。比如說:在對接的時候前端動不動就甩個截圖過來說接口有問題,你檢查了半天發(fā)現(xiàn)前端傳遞的參數(shù)有問題。針對以上:今天給大家分享一下SpringBoot如何實現(xiàn)統(tǒng)一參數(shù)校驗。

實現(xiàn)方式

??使用 @Validated注解配合參數(shù)校驗注解, 比如:@NotEmpty對參數(shù)進行校驗。然后對拋出的異常ControllerAdvice進行捕獲然后調(diào)整輸出數(shù)據(jù)。

TestController

@RestControllerpublic?class?TestController?{????/**?????*?表單請求?????*?@param?form?請求參數(shù)?????*?@return?響應數(shù)據(jù)?????*/????@PostMapping("/formRequest")????public?ResultVo?formRequest(@Validated?RequestForm?form){????????return?ResultVoUtil.success(form);????}????/**?????*?JSON請求?????*?@param?form?請求參數(shù)?????*?@return?響應數(shù)據(jù)?????*/????@PostMapping("/jsonRequest")????public?ResultVo?jsonRequest(@RequestBody?@Validated?RequestForm?form){????????return?ResultVoUtil.success(form);????}}

RequestForm

@Datapublic?class?RequestForm?{????@NotEmpty(message?=?"姓名不能為空")????private?String?name;????@Min(value?=?1?,?message?=?"年齡不能小于1歲")????private?Integer?age;????@NotEmpty(message?=?"性別不能為空")????private?Integer?sex;}

測試結(jié)果

請求:http://localhost:8080/formRequest 不傳任何參數(shù)。

這個時候SpringBoot已經(jīng)根據(jù)校驗注解對參數(shù)進行校驗了。并且輸出了一大堆的錯誤信息。這個時候前端在對接的時候看到這樣的錯誤信息,反手就是給你截個圖告訴你接口有問題。所以這個時候就該使用 ControllerAdvice規(guī)范異常返回信息了。

ControllerAdvice

@Slf4j@RestControllerAdvicepublic?class?ControllerAdvice?{????/**?????*?攔截表單參數(shù)校驗?????*/????@ResponseStatus(HttpStatus.OK)????@ExceptionHandler({BindException.class})????public?ResultVo?bindException(BindException?e)?{????????BindingResult?bindingResult?=?e.getBindingResult();????????return?ResultVoUtil.error(Objects.requireNonNull(bindingResult.getFieldError()).getDefaultMessage());????}????/**?????*?攔截JSON參數(shù)校驗?????*/????@ResponseStatus(HttpStatus.OK)????@ExceptionHandler(MethodArgumentNotValidException.class)????public?ResultVo?bindException(MethodArgumentNotValidException?e)?{????????BindingResult?bindingResult?=?e.getBindingResult();????????return?ResultVoUtil.error(Objects.requireNonNull(bindingResult.getFieldError()).getDefaultMessage());????}}

@RestControllerAdvice會將返回的數(shù)據(jù)以json輸出,如果不需要可以使用@ControllerAdvice

以上代碼只返回了錯誤信息。可以根據(jù)實際情況進行調(diào)整。

這個時候的錯誤信息就比較友好了,非常明確的指出了缺少參數(shù)。

常用校驗注解

案例

@Datapublic?class?ExampleForm?{????@NotEmpty(message?=?"姓名不能為空")????@Length(min?=?1?,?max?=?10?,?message?=?"名字長度1~10")????private?String?name;????@Range(min?=?1?,?max?=?99?,?message?=?"年齡范圍在1~99歲")????private?Integer?age;????@Pattern(regexp?=?"^[1][3,4,5,7,8][0-9]{9}$"?,?message?=?"電話號碼有誤")????private?String?phone;????@Email(message?=?"郵箱格式有誤")????private?String?email;????@Valid????@Size(min?=?1?,max?=??10?,?message?=?"列表中的元素數(shù)量為1~10")????private?List?requestFormList;????@Future(message?=?"開始時間必須大于當前時間")????private?Date?beginTime;}

實現(xiàn)嵌套驗證

??在實際的開發(fā)中,前臺會后臺傳遞一個list,我們不僅要限制每次請求list內(nèi)的個數(shù),同時還要對list內(nèi)基本元素的屬性值進行校驗。這個時候就需要進行嵌套驗證了,實現(xiàn)的方式很簡單。在list上添加@Vaild就可以實現(xiàn)了。

@Datapublic?class?JsonRequestForm?{????@Vaild????@Size(min?=?1?,max?=??10?,?message?=?"列表中的元素數(shù)量為1~10")????private?List?requestFormList;}


作者:不一樣的科技宅
原文鏈接:https://juejin.im/post/5e5fb6ea51882549422ee257

總結(jié)

以上是生活随笔為你收集整理的校验json格式_不来学一下SpringBoot统一参数校验?的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。