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

您的位置:首頁技術文章
文章詳情頁

Spring-Validation 后端數據校驗的實現

瀏覽:138日期:2023-08-28 10:28:44

前言

最近看到很多童鞋在項目中的對請求參數的校驗都用的if來判斷各參數的屬性,如:

if(StringUtils.isBlank(username)){ return RR.exception('賬號不能為空');}if(StringUtils.isBlank(password)){ return RR.exception('密碼不能為空');}if(StringUtils.isBlank(realName)){ return RR.exception('姓名不能為空');}......

每個參數都需要這樣一個個去校驗null,返回對應信息,代碼就像疊羅漢一樣~~,在此,樓主強烈推薦一個神器:Validation,有了它,再也不用這樣去校驗參數啦,可以讓我們在項目中不用太關注其他東西,專注于業務邏輯的編寫。

引入核心依賴

<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId></dependency>

使用示例-添加用戶

需要校驗的實體類,在此使用了一些常用的校驗注解,基本上能夠見名知意,每個注解中都有message屬性,就是校驗不通過后的提示信息

@Data@AllArgsConstructor@NoArgsConstructor@ApiModel(value = 'Account', description = '用戶實體類')public class Account implements Serializable { private static final long serialVersionUID = -6310331730721778951L; private Long id; @NotBlank(message = '用戶名不能為空') @Length(max = 10, message = '用戶名最長為10位') private String name; @Pattern(regexp = PatternUtil.PASSWORDREGEX, message = '密碼為6-20位數字加字母組合') private String pwd; @NotBlank(message = '姓名不能為空') @Length(max = 8, message = '姓名最長為8位') private String realName; @Pattern(regexp = PatternUtil.PHONENOREGEX, message = '手機號碼格式不正確') private String phone; @NotNull(message = '用戶性別不能為空') @Max(value = 1,message = '性別 0:男 1:女') @Min(value = 0,message = '性別 0:男 1:女') private Integer sex; @NotNull(message = '用戶狀態不能為空') @Max(value = 1,message = '用戶狀態 0:啟用 1:禁用') @Min(value = 0,message = '用戶狀態 0:啟用 1:禁用') private Integer status; @Length(max = 200, message = '備注最長為200個字符') private String rmk;}

controller接口,注意在接收參數前需加上@Validated注解,這樣就會逐個去校驗實體類中需要加了校驗注解的的屬性,完全通過才進入下一步業務處理,否則拋出MethodArgumentNotValidException異常,在這里我們直接將異常拋出,交給全局異常處理類來處理。

@SysLog(menu = '用戶管理', function = '添加',filterParams = {'pwd','password','salt'})@PermissionCheck('account:manager:add')@PostMapping(value = '/add', produces = BaseConsts.REQUEST_HEADERS_CONTENT_TYPE)@ApiOperation(value = '用戶管理-添加用戶接口', notes = '用戶管理-添加用戶接口', httpMethod = BaseConsts.REQUEST_METHOD, response = RR.class)public RR add(@Validated @RequestBody Account account) throws Exception { return RR.success('添加用戶成功');}

聲明全局異常處理類,處理所有異常,可以隨業務需要將異常種類細分,返回錯誤碼,返回提示信息可自由定義... 這里只需關注MethodArgumentNotValidException異常。

@RestControllerAdvicepublic class GlobalExceptionHandle { /** * @param e * @return * @Description 未知異常處理 */ @ExceptionHandler(Exception.class) public RR handleException(Exception e) { e.printStackTrace(); return RR.exception('系統異常,請聯系管理員'); } /** * @param e * @return * @Description 請求參數異常 */ @ExceptionHandler(MethodArgumentNotValidException.class) public RR handleMethodArgumentNotValidException(MethodArgumentNotValidException e) { return RR.exception('請求參數錯誤:[' + e.getBindingResult().getFieldError().getDefaultMessage() + ']'); } /** * @param e * @return * @Description 系統業務服務異常 */ @ExceptionHandler(ServerException.class) public RR handleServerException(ServerException e) { return RR.exception(e.getMessage()); } /** * @param e * @return * @Description 令牌校驗異常 */ @ExceptionHandler(ExpireException.class) public RR handleExpireException(ExpireException e) { return RR.expire(e.getMessage()); } /** * @param e * @return * @Description 無權訪問異常 */ @ExceptionHandler(AccessDeniedException.class) public RR handleAccessDeniedException(AccessDeniedException e) { return RR.forbidden(e.getMessage()); } /** * @param e * @return * @Description 自定義重復操作異常 */ public RR handleRepeatHandleException(RepeatHandleException e) { return RR.exception('您的請求已發送,請勿重復操作!'); } /** * @param e * @return * @Description 登錄異常處理 */ @ExceptionHandler(AuthenticationException.class) public RR handleAuthenticationException(AuthenticationException e) { return RR.exception(e.getMessage()); }}

然后我們用Swagger來測試一下接口

1.用戶名為空

Spring-Validation 后端數據校驗的實現

2.手機號格式錯誤

Spring-Validation 后端數據校驗的實現

通過返回結果可以看到,我們的校驗注解已經幫我們按照指定的校驗方式校驗了指定的字段屬性,我們在統一的全局異常處理類中將提示信息封裝成需要的返回結果就可以了。

分組校驗

有的童鞋在此可能有疑問了,上述方法雖然可行,但我在新增用戶和修改用戶兩個接口中,新增用戶的用戶id是自動生成的,無需校驗;修改用戶的用戶id是必傳的,則需校驗。在此業務場景中,那豈不是需要聲明兩個實體類,但這兩個實體類中的屬性又大致相同,這不是增加麻煩嗎?其實不然,在此我們可以用到 groups 屬性來解決此場景下的問題。

聲明分組

注意:在聲明分組的時候盡量加上 extend javax.validation.groups.Default 否則,在你聲明@Validated(Update.class)的時候,就會出現你在默認沒添加groups = {}的時候的校驗組@Email(message = '郵箱格式不對'),會不去校驗,因為默認的校驗組是groups = {Default.class}。

/** * 數據新增分組 */public interface Create extends Default {}/** * 數據更新分組 */public interface Update extends Default {}

校驗注解中添加分組,groups 為一個數組,可以添加多個分組

@NotNull(message = 'id不能為空' , groups = Update.class)private Long id;@NotBlank(message = '用戶名不能為空' , groups = {Create.class, Update.class})@Length(max = 10, message = '用戶名最長為10位')private String name;

修改Controller中的@Validated注解,聲明校驗分組

@PermissionCheck('account:manager:add')@PostMapping(value = '/add', produces = BaseConsts.REQUEST_HEADERS_CONTENT_TYPE)@ApiOperation(value = '用戶管理-添加用戶接口', notes = '用戶管理-添加用戶接口', httpMethod = BaseConsts.REQUEST_METHOD, response = RR.class)public RR add(@Validated(Create.class) @RequestBody Account account) throws Exception { return RR.success('添加用戶成功');}@PermissionCheck('account:manager:edit')@PostMapping(value = '/edit', produces = BaseConsts.REQUEST_HEADERS_CONTENT_TYPE)@ApiOperation(value = '用戶管理-修改用戶接口', notes = '用戶管理-修改用戶接口', httpMethod = BaseConsts.REQUEST_METHOD, response = RR.class)public RR edit(@Validated(Update.class) @RequestBody Account account) throws Exception { return RR.success('編輯用戶成功');}

使用相同的請求參數測試一下添加用戶和修改用戶的接口

測試添加接口

Spring-Validation 后端數據校驗的實現

測試修改接口

Spring-Validation 后端數據校驗的實現

通過接口的返回結果可以看到,新增用戶的接口并沒有校驗id這個參數了,而修改用戶的接口中則校驗了id不能為空。

常用校驗注解

以上就是樓主在項目中使用validation的總結歸納,下面收集了一些常用注解,紅色的標注則是樓主在項目中用的比較多的。

JSR提供的校驗注解: @Null 被注釋的元素必須為 null @NotNull 被注釋的元素必須不為 null @AssertTrue 被注釋的元素必須為 true @AssertFalse 被注釋的元素必須為 false @Min(value) 被注釋的元素必須是一個數字,其值必須大于等于指定的最小值 @Max(value) 被注釋的元素必須是一個數字,其值必須小于等于指定的最大值 @DecimalMin(value) 被注釋的元素必須是一個數字,其值必須大于等于指定的最小值 @DecimalMax(value) 被注釋的元素必須是一個數字,其值必須小于等于指定的最大值 @Size(max=, min=) 被注釋的元素的大小必須在指定的范圍內 @Digits (integer, fraction) 被注釋的元素必須是一個數字,其值必須在可接受的范圍內 @Past 被注釋的元素必須是一個過去的日期 @Future 被注釋的元素必須是一個將來的日期 @Pattern(regex) 被注釋的元素必須符合指定的正則表達式

Hibernate Validator提供的校驗注解: @NotBlank() 驗證字符串非null且非空格,長度必須大于0 @Email 被注釋的元素必須是電子郵箱地址 @Length(min=,max=) 被注釋的字符串的大小必須在指定的范圍內 @NotEmpty 被注釋的字符串的必須非空 @Range(min=,max=,message=) 被注釋的元素必須在合適的范圍內

參考博文: https://www.jb51.net/article/157604.htm

到此這篇關于Spring-Validation 后端數據校驗的實現的文章就介紹到這了,更多相關Spring Validation數據校驗內容請搜索好吧啦網以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持好吧啦網!

標簽: Spring
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
超碰超碰人人人人精品| 久久九九精品| 欧美成a人国产精品高清乱码在线观看片在线观看久 | 香蕉视频成人在线观看| 国产成人精品亚洲线观看| 欧美在线观看天堂一区二区三区| 日韩在线一二三区| 日本欧美在线看| 日本不卡视频在线观看| 国产乱人伦丫前精品视频| 国内自拍视频一区二区三区| 日韩高清欧美| 国产视频一区免费看| 久久香蕉精品| 在线国产精品一区| 久久国产免费看| 国产成人精品福利| 狠狠久久婷婷| 国产亚洲欧美日韩在线观看一区二区 | 亚洲性图久久| 男人的天堂亚洲一区| 综合日韩av| 久久要要av| 日韩精品三级| 国产成人免费| 一区视频在线| 欧美日韩91| 日韩欧美二区| 亚州欧美在线| 樱桃视频成人在线观看| 久久亚洲风情| 久久精品亚洲一区二区| 欧美va亚洲va日韩∨a综合色| 亚洲涩涩av| 国产精品porn| 亚洲精品2区| 欧美精品aa| 偷拍精品精品一区二区三区| 水野朝阳av一区二区三区| 欧美激情视频一区二区三区免费 | 亚洲国产成人精品女人| 日韩欧美中文字幕电影 | 男女激情视频一区| 精品一区二区三区中文字幕| 在线国产一区二区| 国产极品久久久久久久久波多结野| 日韩欧美精品一区| 亚洲欧美专区| 精品成人免费一区二区在线播放| 日韩高清国产一区在线| 国产一区二区中文| 久久精品超碰| 在线一区电影| 精品国产亚洲日本| 免费成人性网站| 精品九九在线| 午夜视频一区二区在线观看| 伊人久久av| 日韩av午夜在线观看| 国产精品99免费看| 欧美激情视频一区二区三区免费 | 国产一区二区三区四区| 玖玖精品视频| 成年男女免费视频网站不卡| 日本不卡高清视频| 欧美特黄a级高清免费大片a级| 国产免费av国片精品草莓男男| 欧美午夜不卡| 久久精品午夜| 欧美中文一区| 蜜臀a∨国产成人精品| 成人免费电影网址| 久久在线91| 国产精品伊人| 日本一不卡视频| 奶水喷射视频一区| 九九在线精品| 999国产精品视频| 精品国产麻豆| 欧美a一区二区| 国产亚洲一卡2卡3卡4卡新区| 男女精品网站| 亚洲欧洲另类| 久久国产成人午夜av影院宅| 精品一区二区三区在线观看视频| 18国产精品| 日本视频一区二区| 日韩精品久久久久久久软件91| 蜜桃久久精品一区二区| 日韩午夜免费| 自拍日韩欧美| 亚洲一区观看| 免费精品视频| 国产一级一区二区| 国产一区91| 老鸭窝毛片一区二区三区| 自由日本语亚洲人高潮| 伊人精品视频| 美女网站一区| 欧美天堂亚洲电影院在线观看| 久久亚洲国产| 伊人成人网在线看| 国产精品日韩久久久| 欧美特黄一区| 首页国产欧美久久| 亚洲制服欧美另类| 国产日韩一区二区三区在线| 国产精久久久| 香蕉成人av| 三级一区在线视频先锋| 国产调教精品| 成人国产精品久久| 红桃视频国产一区| 日本99精品| 国产精品久一| 偷拍精品精品一区二区三区| 亚洲精品一区二区妖精| 亚洲精品美女91| 精品一区二区三区中文字幕视频| 日本不卡免费高清视频在线| 在线一区免费| 亚洲精品亚洲人成在线观看| 日本免费在线视频不卡一不卡二| 国产精品s色| 成人看片网站| 亚洲精品97| 天堂va在线高清一区| 老司机精品视频在线播放| 成人台湾亚洲精品一区二区 | 欧美极品一区二区三区| 国产精品22p| 国际精品欧美精品| 国产一区二区三区四区二区| 在线国产一区| 蜜桃久久久久久久| 日韩欧美中文字幕电影| 国产亚洲人成a在线v网站| 欧美成人一二区| 国产在线观看91一区二区三区| 久久国产毛片| 久久成人一区| 亚洲免费一区二区| 亚洲视频国产| 国产欧美日韩亚洲一区二区三区| 亚洲美女久久| 成人精品国产亚洲| 欧美美女一区| 一区二区国产精品| 国产日产精品_国产精品毛片 | 中文字幕一区二区三区日韩精品 | 久久婷婷激情| 亚洲欧洲专区| 久久中文字幕导航| 99久久99久久精品国产片果冰| 影音先锋国产精品| 69精品国产久热在线观看| 国产资源在线观看入口av| 欧美精品一区二区三区精品| 亚洲香蕉久久| 国产一区二区视频在线看| 欧美色图国产精品| 综合一区二区三区| 亚洲一级少妇| 国产精品老牛| 国产日韩亚洲欧美精品| 日韩电影免费网站| 中文字幕成人| 国产一区二区三区不卡视频网站 | 久久国产精品免费精品3p | 欧美在线91| 久久精品青草| 午夜精品影视国产一区在线麻豆| 国产成人a视频高清在线观看| 蜜桃一区二区三区在线观看| 国产日韩欧美三级| 欧美一级精品| 国产精品亚洲综合久久| 美女毛片一区二区三区四区| 免费在线观看一区二区三区| 91精品亚洲| 国产日韩欧美三级| 最新日韩av| 精品国产亚洲一区二区三区大结局| 日韩视频在线一区二区三区| 色在线中文字幕| 欧美在线观看天堂一区二区三区| 999精品色在线播放| 国产精品自拍区| 99在线|亚洲一区二区| 日本不卡视频在线观看 | 免费黄网站欧美| 欧美精选视频一区二区| 91福利精品在线观看| 1024精品久久久久久久久| 国语精品一区| 久久精品国产99国产| 亚洲三级在线| 午夜精品免费| 日韩不卡在线| 国产精品男女|