日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術(shù)文章
文章詳情頁

詳解SpringBoot中的參數(shù)校驗(yàn)(項(xiàng)目實(shí)戰(zhàn))

瀏覽:34日期:2023-05-04 15:27:14

Java后端發(fā)工作中經(jīng)常會(huì)對前端傳遞過來的參數(shù)做一些校驗(yàn),在業(yè)務(wù)中還要拋出異常或者不斷的返回異常時(shí)的校驗(yàn)信息,充滿了if-else這種校驗(yàn)代碼,在代碼中相當(dāng)冗長。例如說,用戶注冊時(shí),會(huì)校驗(yàn)手機(jī)格式的正確性,用戶名的長度等等。雖說前端也可以做參數(shù)校驗(yàn),但是為了保證我們API接口的可靠性,以保證最終數(shù)據(jù)入庫的正確性,后端進(jìn)行參數(shù)校驗(yàn)不可忽視。 Hibernate Validator 提供了一種統(tǒng)一方便的方式,讓我們快速的實(shí)現(xiàn)參數(shù)校驗(yàn)。

Hibernate Validator 使用注解,實(shí)現(xiàn)聲明式校驗(yàn)。而在實(shí)現(xiàn)原理上,也是基于 Spring AOP 攔截,實(shí)現(xiàn)校驗(yàn)相關(guān)的操作。 javax.validation.constraints 包下,定義了一系列的約束( constraint )注解。文末會(huì)貼上一些常用的注解。 如果項(xiàng)目的框架是 spring boot 的話,在 spring-boot-starter-web 中已經(jīng)包含了 Hibernate-validator 的依賴( 版本<2.3 )。 2.3 以后的版本中 spring-boot-starter-web 已經(jīng)去除了這個(gè)依賴,需要手動(dòng)引入 Hibernate-validator 依賴,并且有一些變化,因此 2.3.x 的版本暫不研究。本文使用的版本是 2.2.8 。

實(shí)戰(zhàn)

1、創(chuàng)建實(shí)體類

package com.yese.pojo;import lombok.AllArgsConstructor;import lombok.Builder;import lombok.Data;import lombok.NoArgsConstructor;import org.hibernate.validator.constraints.Length;import javax.validation.constraints.*;@Data@Builder@AllArgsConstructor@NoArgsConstructorpublic class User { /** * 用戶ID */ @NotNull(message = '用戶id不能為空') private Long userId; /** * 用戶名 */ @NotBlank(message = '用戶名不能為空') @Length(max = 20, message = '用戶名不能超過10個(gè)字符') @Pattern(regexp = '^[u4E00-u9FA5A-Za-z0-9*]*$', message = '用戶名限制:最多10字符,包含文字、字母和數(shù)字') private String username; /** * 密碼 */ @NotBlank(message = '密碼不能為空') private String password; /** * 手機(jī)號 */ @NotBlank(message = '手機(jī)號不能為空') @Pattern(regexp = '^[1][3,4,5,6,7,8,9][0-9]{9}$', message = '手機(jī)號格式有誤') private String mobile; /** * 性別 */ @NotNull(message = '性別不能為空') private Integer sex; /** * 年齡 */ @NotNull(message = '年齡不能為空') @Min(value = 1, message = '年齡最小為1歲') @Max(value = 120, message = '年齡最大為120歲') private Integer age; /** * 郵箱 */ @NotBlank(message = '郵箱不能為空') @Email(message = '郵箱格式錯(cuò)誤') private String email;}

2、創(chuàng)建controller

package com.yese.controller;import com.yese.pojo.User;import lombok.extern.slf4j.Slf4j;import org.springframework.validation.annotation.Validated;import org.springframework.web.bind.annotation.PostMapping;import org.springframework.web.bind.annotation.RequestBody;import org.springframework.web.bind.annotation.RestController;@RestController@Slf4jpublic class UserController { /** * controller方法的入?yún)⒗锩嬖趯?shí)體類前面加上@Validated */ @PostMapping('/user') public void add(@RequestBody @Validated User user) { log.info('user====={}', user); }}

3、創(chuàng)建全局異常處理器

package com.yese.config;import org.springframework.web.bind.MethodArgumentNotValidException;import org.springframework.web.bind.annotation.ExceptionHandler;import org.springframework.web.bind.annotation.RestControllerAdvice;import javax.validation.ConstraintViolationException;import java.util.HashMap;import java.util.Map;import java.util.StringJoiner;/** * 全局異常處理器 */@RestControllerAdvicepublic class GlobalExceptionHandler { /** * post方式提交json數(shù)據(jù),參數(shù)校驗(yàn)失敗后,會(huì)拋出一個(gè)MethodArgumentNotValidException */ @ExceptionHandler(MethodArgumentNotValidException.class) public Map<String, Object> handleMethodArgumentNotValidException(MethodArgumentNotValidException e) { // 獲取所有的錯(cuò)誤 // List<FieldError> fieldErrors = e.getBindingResult().getFieldErrors(); // 獲取錯(cuò)誤提示 // System.out.println(fieldErrors.get(0).getDefaultMessage()); // 獲取錯(cuò)誤字段 // System.out.println(fieldErrors.get(0).getField()); // 將所有的錯(cuò)誤提示使用';'拼接起來并返回 StringJoiner sj = new StringJoiner(';'); e.getBindingResult().getFieldErrors().forEach(x -> sj.add(x.getDefaultMessage())); // 此處通常定義一個(gè)全局相應(yīng)對象返回 Map<String, Object> map = new HashMap<>(); // 此處狀態(tài)碼可以通過枚舉或者常量定義 map.put('code', 1001); map.put('msg', sj.toString()); return map; } /** * get方式提交參數(shù),參數(shù)校驗(yàn)失敗后,會(huì)拋出一個(gè)ConstraintViolationException */ @ExceptionHandler(ConstraintViolationException.class) public Map<String, Object> handleConstraintViolationException(ConstraintViolationException e) { StringJoiner sj = new StringJoiner(';'); e.getConstraintViolations().forEach(x -> sj.add(x.getMessage())); Map<String, Object> map = new HashMap<>(); map.put('code', 1001); map.put('msg', sj.toString()); return map; }}

4、測試

詳解SpringBoot中的參數(shù)校驗(yàn)(項(xiàng)目實(shí)戰(zhàn))

效果符合預(yù)期!

@Valid和@Validated

絕大多數(shù)場景下,我們使用 @Validated 注解即可。

而在有嵌套校驗(yàn)的場景,我們使用 @Valid 注解添加到成員屬性上。

附常用注解

javax.validation.constraints 包下

注解 驗(yàn)證的數(shù)據(jù)類型 說明 @Null 任意類型 驗(yàn)證注解的元素值必須是null @NotNull 任意類型 驗(yàn)證注解的元素值不是null @NotBlank 字符串 驗(yàn)證注解的元素值不為空(不為null、去除首位空格后長度大于0) @NotEmpty CharSequence子類型、Collection、Map、數(shù)組 驗(yàn)證注解的元素值不為null且不為空(字符串長度不為0、集合大小不為0) @Min(value=值) 數(shù)值類型 驗(yàn)證注解的元素值大于等于@Min指定的value值 @Max(value=值) 和@Min要求一樣 驗(yàn)證注解的元素值小于等于@Max指定的value值 @DecimalMin(value=值) 和@Min要求一樣 驗(yàn)證注解的元素值大于等于@ DecimalMin指定的value值 @DecimalMax(value=值) 和@Min要求一樣 驗(yàn)證注解的元素值小于等于@ DecimalMax指定的value值 @Digits(integer=整數(shù)位數(shù), fraction=小數(shù)位數(shù)) 和@Min要求一樣 驗(yàn)證注解的元素值的整數(shù)位數(shù)和小數(shù)位數(shù)上限 @Size(min=下限, max=上限) 字符串、Collection、Map、數(shù)組等 驗(yàn)證注解的元素值的在min和max(包含)指定區(qū)間之內(nèi),如字符長度、集合大小 @Positive 判斷正數(shù) @PositiveOrZero 判斷正數(shù)或 0 。 @Negative 判斷負(fù)數(shù)。 @NegativeOrZero 判斷負(fù)數(shù)或 0 。 @Past 日期類型 驗(yàn)證注解的元素值(日期類型)比當(dāng)前時(shí)間早 @Future 與@Past要求一樣 驗(yàn)證注解的元素值(日期類型)比當(dāng)前時(shí)間晚 @AssertFalse Boolean 驗(yàn)證注解的元素值是false @AssertTrue Boolean 驗(yàn)證注解的元素值是true @Range(min=最小值, max=最大值) BigDecimal,BigInteger,CharSequence, byte, short, int, long等原子類型和包裝類型 驗(yàn)證注解的元素值在最小值和最大值之間 @Email 字符串 驗(yàn)證注解的元素值是Email,也可以通過regexp和flag指定自定義的email格式 @Pattern(regexp=正則表達(dá)式,flag=標(biāo)志的模式) 字符串 驗(yàn)證注解的元素值與指定的正則表達(dá)式匹配 @Valid 任何非原子類型 指定遞歸驗(yàn)證關(guān)聯(lián)的對象如用戶對象中有個(gè)地址對象屬性,如果想在驗(yàn)證用戶對象時(shí)一起驗(yàn)證地址對象的話,在地址對象上加@Valid注解即可級聯(lián)驗(yàn)證

org.hibernate.validator.constraints 包下,定義了一系列的約束( constraint )注解。如下:

@Range(min=, max=) :被注釋的元素必須在合適的范圍內(nèi)。

@Length(min=, max=) :被注釋的字符串的大小必須在指定的范圍內(nèi)。

@URL(protocol=,host=,port=,regexp=,flags=) :被注釋的字符串必須是一個(gè)有效的 URL 。

@SafeHtml :判斷提交的 HTML 是否安全。例如說,不能包含 javascript 腳本等等。

到此這篇關(guān)于詳解SpringBoot中的參數(shù)校驗(yàn)(項(xiàng)目實(shí)戰(zhàn))的文章就介紹到這了,更多相關(guān)SpringBoot 參數(shù)校驗(yàn)內(nèi)容請搜索好吧啦網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持好吧啦網(wǎng)!

標(biāo)簽: Spring
相關(guān)文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
久久精品国产久精国产| 欧美.日韩.国产.一区.二区 | 欧美日韩精品一区二区三区视频 | 国产欧美视频在线| 亚洲毛片一区| 激情国产在线| 国产美女精品视频免费播放软件| 亚洲激情久久| 亚洲手机在线| 欧美.日韩.国产.一区.二区| 国产亚洲欧洲| 日韩激情中文字幕| 国产精品一区高清| 麻豆国产91在线播放| 国产中文在线播放| 美女尤物久久精品| 欧美a级一区二区| 99精品在线免费在线观看| 亚洲香蕉久久| 国产精品最新| 国产精品美女久久久久久不卡| 久久精品凹凸全集| 成人久久一区| 午夜久久av| 国产va在线视频| 亚洲黄色影院| 久久国产欧美日韩精品| 另类专区亚洲| 国产亚洲电影| av亚洲在线观看| 日韩一区二区三免费高清在线观看 | 久久在线视频免费观看| 99久久精品费精品国产| 日本亚洲三级在线| 午夜欧美巨大性欧美巨大| av免费不卡国产观看| 久久高清精品| 国产日韩欧美中文在线| 日韩精品专区| 国产午夜精品一区在线观看| 香蕉视频亚洲一级| 日韩精品午夜视频| 国产精品sm| 亚洲精品网址| 精品三级国产| 国产欧美日韩精品高清二区综合区| 精品国产日韩欧美精品国产欧美日韩一区二区三区 | 98精品视频| 日本成人一区二区| 伊人久久亚洲影院| 三上悠亚国产精品一区二区三区 | 天堂8中文在线最新版在线| 亚洲伊人精品酒店| 在线国产日韩| 亚洲精品影视| 日韩有吗在线观看| 亚洲一区欧美激情| 一本色道精品久久一区二区三区| 伊人久久大香线蕉av超碰演员| 伊人久久av| 欧美日韩1区2区3区| 欧美国产另类| 久久成人高清| 综合在线一区| 午夜国产精品视频| 国产亚洲精品久久久久婷婷瑜伽| 在线国产一区二区| 欧美亚洲国产精品久久| 成人精品天堂一区二区三区| 蜜桃一区二区三区在线观看| 久久国产日韩| 国产农村妇女精品一区二区| 亚洲毛片在线免费| 91精品丝袜国产高跟在线| 日本麻豆一区二区三区视频| 日韩欧美三区| 日韩成人av影视| 日本伊人午夜精品| 国产精品毛片视频| 成人小电影网站| 成人羞羞在线观看网站| 国内精品麻豆美女在线播放视频| 久久伊人久久| 日韩精品欧美大片| 日韩欧美网址| 在线精品福利| 成人在线黄色| 最新国产拍偷乱拍精品| 日本午夜精品视频在线观看| 吉吉日韩欧美| 亚洲综合丁香| 久久一区欧美| 亚洲激情精品| 国产成人久久精品麻豆二区 | 久久久久蜜桃| 亚洲欧美日韩视频二区| 日韩精品一区二区三区中文在线 | 美女视频黄久久| 国产亚洲一区二区手机在线观看| 久久久久免费av| 亚洲久久视频| 久久免费黄色| 麻豆视频一区二区| 狠狠爱www人成狠狠爱综合网| 日韩av电影一区| 亚洲啊v在线| 日韩av中文字幕一区二区三区| 国产一区二区三区视频在线| 国产毛片久久| 欧美日韩视频网站| 国产精品一级在线观看| 色偷偷偷在线视频播放| 国产午夜精品一区在线观看| 黄色亚洲精品| 国产精品天堂蜜av在线播放| 久久久久久久久丰满| 日韩精品亚洲专区| 亚洲福利一区| 国产精品白浆| 视频一区日韩| 激情五月综合| 亚洲一级少妇| 欧美激情另类| 麻豆91在线播放| 久久精品国内一区二区三区| 亚洲精品在线a| 三级一区在线视频先锋| 麻豆成全视频免费观看在线看| 亚洲精品三级| 日本国产精品| 欧美片网站免费| 国产精品一区二区免费福利视频| 伊人久久亚洲热| 91精品二区| 免费高清在线一区| 亚洲网址在线观看| 亚洲一区av| 亚洲天堂免费| 四虎精品永久免费| 欧美专区18| 亚洲欧美网站| 亚洲欧美激情诱惑| 日韩在线观看一区二区| 国产精品手机在线播放| 日韩国产精品久久久久久亚洲| 久久香蕉国产| 久久青草久久| 亚洲精品福利| 国产精品久久久久久久久久妞妞| 日韩高清在线观看一区二区| 日韩欧美激情| 91亚洲无吗| 国产精品porn| sm久久捆绑调教精品一区| 岛国精品一区| 91久久国产| 国产精品久久久久av蜜臀| 福利视频一区| 日韩在线观看一区| 亚洲在线国产日韩欧美| 亚洲精品成a人ⅴ香蕉片| 国产精品久久久网站| 中文字幕系列一区| 日韩不卡手机在线v区| 国产精品伦理久久久久久| 午夜国产欧美理论在线播放 | 久久福利一区| 亚洲v天堂v手机在线| 国产精品视频首页| 久久精品国产一区二区| 99精品99| 久久国产精品色av免费看| av中文字幕在线观看第一页| 精品91久久久久| 久久超级碰碰| 影音先锋国产精品| 亚洲精品黄色| 亚洲激情中文在线| 国产精品视频3p| 视频精品一区二区| 五月天久久777| 首页国产精品| 亚洲精品伊人| 欧美1区免费| 欧美激情一区| 亚洲午夜免费| 国产一区二区三区91| 亚洲一二av| 午夜久久影院| 日韩国产一区二区| 粉嫩av一区二区三区四区五区 | 久久三级视频| 久久99久久久精品欧美| 伊人影院久久| 91欧美在线| 理论片午夜视频在线观看| 播放一区二区| 国产精品99久久精品| 高清日韩中文字幕| 欧美视频一区|