javascript
校验json格式_不来学一下SpringBoot统一参数校验?
- 微服務架構之春招總結:SpringCloud、Docker、Dubbo與SpringBoot
- 一個SpringBoot問題就干趴下了?我卻憑著這份PDF文檔吊打面試官.
- 金三銀四第一天,啃透這些SpringBoot知識點,還怕干不贏面試官?
前言
??在日常的開發中,參數校驗是非常重要的一個環節,嚴格參數校驗會減少很多出bug的概率,增加接口的安全性。也會減少對接時不必要的溝通。比如說:在對接的時候前端動不動就甩個截圖過來說接口有問題,你檢查了半天發現前端傳遞的參數有問題。針對以上:今天給大家分享一下SpringBoot如何實現統一參數校驗。
實現方式
??使用 @Validated注解配合參數校驗注解, 比如:@NotEmpty對參數進行校驗。然后對拋出的異常ControllerAdvice進行捕獲然后調整輸出數據。
TestController
@RestControllerpublic?class?TestController?{????/**?????*?表單請求?????*?@param?form?請求參數?????*?@return?響應數據?????*/????@PostMapping("/formRequest")????public?ResultVo?formRequest(@Validated?RequestForm?form){????????return?ResultVoUtil.success(form);????}????/**?????*?JSON請求?????*?@param?form?請求參數?????*?@return?響應數據?????*/????@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;}測試結果
請求:http://localhost:8080/formRequest 不傳任何參數。
這個時候SpringBoot已經根據校驗注解對參數進行校驗了。并且輸出了一大堆的錯誤信息。這個時候前端在對接的時候看到這樣的錯誤信息,反手就是給你截個圖告訴你接口有問題。所以這個時候就該使用 ControllerAdvice規范異常返回信息了。
ControllerAdvice
@Slf4j@RestControllerAdvicepublic?class?ControllerAdvice?{????/**?????*?攔截表單參數校驗?????*/????@ResponseStatus(HttpStatus.OK)????@ExceptionHandler({BindException.class})????public?ResultVo?bindException(BindException?e)?{????????BindingResult?bindingResult?=?e.getBindingResult();????????return?ResultVoUtil.error(Objects.requireNonNull(bindingResult.getFieldError()).getDefaultMessage());????}????/**?????*?攔截JSON參數校驗?????*/????@ResponseStatus(HttpStatus.OK)????@ExceptionHandler(MethodArgumentNotValidException.class)????public?ResultVo?bindException(MethodArgumentNotValidException?e)?{????????BindingResult?bindingResult?=?e.getBindingResult();????????return?ResultVoUtil.error(Objects.requireNonNull(bindingResult.getFieldError()).getDefaultMessage());????}}@RestControllerAdvice會將返回的數據以json輸出,如果不需要可以使用@ControllerAdvice
以上代碼只返回了錯誤信息。可以根據實際情況進行調整。
這個時候的錯誤信息就比較友好了,非常明確的指出了缺少參數。
常用校驗注解
案例
@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?=?"列表中的元素數量為1~10")????private?List?requestFormList;????@Future(message?=?"開始時間必須大于當前時間")????private?Date?beginTime;}實現嵌套驗證
??在實際的開發中,前臺會后臺傳遞一個list,我們不僅要限制每次請求list內的個數,同時還要對list內基本元素的屬性值進行校驗。這個時候就需要進行嵌套驗證了,實現的方式很簡單。在list上添加@Vaild就可以實現了。
@Datapublic?class?JsonRequestForm?{????@Vaild????@Size(min?=?1?,max?=??10?,?message?=?"列表中的元素數量為1~10")????private?List?requestFormList;}
作者:不一樣的科技宅
原文鏈接:https://juejin.im/post/5e5fb6ea51882549422ee257
總結
以上是生活随笔為你收集整理的校验json格式_不来学一下SpringBoot统一参数校验?的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: vue中在当前组件中定义的全局变量怎么在
- 下一篇: Softmax vs. SoftmaxW