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

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

SpringBoot使用validation-api實現參數校驗的示例

瀏覽:140日期:2023-04-27 11:29:04

我們在開發Java項目的時候,經常需要對參數進行一些必填項、格式、長度等進行校驗,如果手寫代碼對參數校驗,每個接口會需要很多低級的代碼,這樣會降低代碼的可讀性。那么我們能不能使用一種比較優雅的方式來實現,對請求中的參數進行校驗呢?

knife4j的安裝與使用可參考我的博客:SpringBoot使用knife4j進行在線接口調試

正文

ValidationApi框架就是用來解決參數校驗中代碼冗余問題,ValidationApi框架提供一些注解用來幫助我們對請求參數進行校驗:

SpringBoot使用validation-api實現參數校驗的示例

SpringBoot使用validation-api實現參數校驗

注入依賴

<!--參數校驗--><dependency> <groupId>javax.validation</groupId> <artifactId>validation-api</artifactId> <version>2.0.1.Final</version></dependency><!--提供一些字符串操作--><dependency> <groupId>org.apache.commons</groupId> <artifactId>commons-lang3</artifactId> <version>3.3.2</version></dependency><!--lombok--><dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <version>1.18.2</version> <optional>true</optional></dependency><!--knife4j接口--><dependency> <groupId>com.github.xiaoymin</groupId> <artifactId>knife4j-spring-boot-starter</artifactId> <version>2.0.4</version></dependency>

UserPojoReq.java請求封裝類

如果成員變量是其他對象實體,該變量必須加 @Valid,否則嵌套中的驗證不生效

@Setter@Getter@ToString@ApiModel('用戶對象')public class UserPojoReq extends Request implements Serializable { private static final long serialVersionUID = -354657839724457905L; @ApiModelProperty(required = true, notes = '主鍵', example = '123') private String id; @ApiModelProperty(required = true, notes = '用戶名', example = 'luo') @NotNull(message = '用戶姓名為必填項,不得為空') @Size(min = 2,max = 20,message = '用戶名長度要在2—8個字符') private String name; @ApiModelProperty(required = true, notes = '消息', example = '消息') private String msg;}

CouponTypeEnum.class :錯誤碼枚舉類

@Getterpublic enum CouponTypeEnum { PARAMETER_ERROR(1001, '請求參數有誤!'), UNKNOWN_ERROR(9999, '未知的錯誤!”); /** * 狀態值 */ private int couponType; /** * 狀態描述 */ private String couponTypeDesc; CouponTypeEnum(int couponType, String couponTypeDesc){ this.couponType = couponType; this.couponTypeDesc = couponTypeDesc; } public static String getDescByType(int couponType) { for (CouponTypeEnum type : CouponTypeEnum.values()) { if (type.couponType == couponType) {return type.couponTypeDesc; } } return null; } public String getcouponTypeStr(){ return String.valueOf(this.couponType); }}

BusinessException.java:自定義業務異常類

/** * 業務自定義異常 */@Getterpublic class BusinessException extends RuntimeException { private static final long serialVersionUID = -1895174013651345407L; private final CouponTypeEnum errorCode; private String primaryErrorCode; private String primaryErrorMsg; private String primaryErrorIP; public BusinessException(CouponTypeEnum errorCode) { this(errorCode, errorCode.getCouponTypeDesc()); } public BusinessException(CouponTypeEnum errorCode, String message) { super(message); this.errorCode = errorCode; } public BusinessException(CouponTypeEnum errorCode, String message,String primaryErrorCode,String primaryErrorMsg,String primaryErrorIP) { super(message); this.errorCode = errorCode; this.primaryErrorCode=primaryErrorCode; this.primaryErrorMsg=primaryErrorMsg; this.primaryErrorIP=primaryErrorIP; } public BusinessException(CouponTypeEnum errorCode,String primaryErrorCode,String primaryErrorMsg,String primaryErrorIP) { this(errorCode, errorCode.getCouponTypeDesc()); this.primaryErrorCode=primaryErrorCode; this.primaryErrorMsg=primaryErrorMsg; this.primaryErrorIP=primaryErrorIP; }}

GlobalExceptionHandler.class 攔截異常并統一處理

MissingServletRequestParameterException:必填項為null異常 HttpMessageNotReadableException:參數類型不匹配異常 MethodArgumentNotValidException:JSON校驗失敗異常(比如長度等) BusinessException:自定義的異常 Exception:其他異常

@RestControllerAdvice('com.luo.producer.controller')@Slf4jpublic class GlobalExceptionHandler { /** * 忽略參數異常處理器 * * @param e 忽略參數異常 * @return Response */ @ResponseStatus(HttpStatus.BAD_REQUEST) @ExceptionHandler(MissingServletRequestParameterException.class) public Response parameterMissingExceptionHandler(MissingServletRequestParameterException e) { log.error('', e); return new Response(CouponTypeEnum.PARAMETER_ERROR.getcouponTypeStr(), '請求參數 ' + e.getParameterName() + ' 不能為空'); } /** * 缺少請求體異常處理器 * * @param e 缺少請求體異常 * @return Response */ @ResponseStatus(HttpStatus.BAD_REQUEST) @ExceptionHandler(HttpMessageNotReadableException.class) public Response parameterBodyMissingExceptionHandler(HttpMessageNotReadableException e) { log.error('', e); return new Response(CouponTypeEnum.PARAMETER_ERROR.getcouponTypeStr(), '參數體不能為空'); } /** * 參數效驗異常處理器 * * @param e 參數驗證異常 * @return ResponseInfo */ @ResponseStatus(HttpStatus.BAD_REQUEST) @ExceptionHandler(MethodArgumentNotValidException.class) public Response parameterExceptionHandler(MethodArgumentNotValidException e) { log.error('', e); // 獲取異常信息 BindingResult exceptions = e.getBindingResult(); // 判斷異常中是否有錯誤信息,如果存在就使用異常中的消息,否則使用默認消息 if (exceptions.hasErrors()) { List<ObjectError> errors = exceptions.getAllErrors(); if (!errors.isEmpty()) {// 這里列出了全部錯誤參數,按正常邏輯,只需要第一條錯誤即可FieldError fieldError = (FieldError) errors.get(0);return new Response(CouponTypeEnum.PARAMETER_ERROR.getcouponTypeStr(), fieldError.getDefaultMessage()); } } return new Response(CouponTypeEnum.PARAMETER_ERROR); } /** * 自定義參數錯誤異常處理器 * * @param e 自定義參數 * @return ResponseInfo */ @ResponseStatus(HttpStatus.BAD_REQUEST) @ExceptionHandler({BusinessException.class}) public Response paramExceptionHandler(BusinessException e) { log.error('', e); // 判斷異常中是否有錯誤信息,如果存在就使用異常中的消息,否則使用默認消息 if (!StringUtils.isEmpty(e.getMessage())) { return new Response(CouponTypeEnum.PARAMETER_ERROR.getcouponTypeStr(), e.getMessage()); } return new Response(CouponTypeEnum.PARAMETER_ERROR); } /** * 其他異常 * * @param e * @return */ @ResponseStatus(HttpStatus.BAD_REQUEST) @ExceptionHandler({Exception.class}) public Response otherExceptionHandler(Exception e) { log.error('其他異常', e); // 判斷異常中是否有錯誤信息,如果存在就使用異常中的消息,否則使用默認消息 if (!StringUtils.isEmpty(e.getMessage())) { return new Response(CouponTypeEnum.UNKNOWN_ERROR.getcouponTypeStr(), e.getMessage()); } return new Response(CouponTypeEnum.UNKNOWN_ERROR); }}

驗證

測試接口

@Valid被標記的實體將會開啟一個校驗的功能

@RequestBody:請求實體需要加上@RequestBody否則MethodArgumentNotValidException異常將會被識別成Exception異常,提示信息將與預期不符。

@RestController@Slf4jpublic class UserController { @PostMapping('/helloluo') @MyPermissionTag(value = 'true') public String helloluo(@RequestBody @Valid UserPojoReq userPojoReq){ return 'Hello World”+userPojoReq; }}

模擬請求參數,進行接口訪問:

SpringBoot使用validation-api實現參數校驗的示例

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

標簽: Spring
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
精品视频91| 亚洲91在线| 国产精品17p| 国产高清亚洲| 精品女同一区二区三区在线观看| 青草综合视频| 日本免费在线视频不卡一不卡二| 亚洲精品福利| 日韩精品一页| 欧美国产专区| 97精品一区| 国产精品99一区二区| 国产精品视区| 日韩1区2区3区| 国产精品久久久久久av公交车| 国产精品久久久网站| 国产在线观看91一区二区三区 | 另类中文字幕国产精品| 日韩中文字幕高清在线观看| 日韩精品dvd| 在线成人直播| 亚洲欧美网站在线观看| 国产伦精品一区二区三区在线播放| 麻豆一区二区99久久久久| 国产传媒在线观看| 免费不卡中文字幕在线| 亚洲精品欧美| 麻豆精品久久久| 激情丁香综合| 日韩精品1区2区3区| 欧美国产另类| 亚洲a一区二区三区| 免费日韩精品中文字幕视频在线| 日韩va亚洲va欧美va久久| 青草国产精品| 国产欧洲在线| 丝袜国产日韩另类美女| 麻豆精品少妇| 91久久中文| 国产精品啊啊啊| 韩日一区二区三区| 国产调教一区二区三区| 日韩精品久久久久久久电影99爱| 亚洲三级国产| 国产成人免费av一区二区午夜| 欧美日韩国产一区精品一区| 久久精品97| 欧美日韩中文一区二区| 日韩国产在线观看一区| 精品日本视频| 蜜桃一区二区三区在线观看| 精品五月天堂| 亚洲欧美日韩精品一区二区| 国产精品**亚洲精品| 99视频精品视频高清免费| 亚洲综合色婷婷在线观看| 中文字幕在线免费观看视频| 日韩中文av| 欧美中文一区二区| 国产精品videossex久久发布 | 精品三级在线观看视频| 午夜在线播放视频欧美| 国产一区福利| 一二三区精品| 成人羞羞在线观看网站| 欧美日韩黄网站| 欧美 日韩 国产精品免费观看| 日韩精品乱码av一区二区| 99精品网站| 麻豆国产精品视频| 最近国产精品视频| 国产一区日韩一区| 国产一区二区色噜噜| 久色成人在线| 蜜桃av在线播放| 国产精品亚洲二区| 首页亚洲欧美制服丝腿| 成人欧美一区二区三区的电影| 日韩午夜视频在线| 欧美日韩少妇| 九九精品调教| 国产精品久久| 蜜桃av一区二区| 午夜精品一区二区三区国产| 日本成人中文字幕| 日韩视频中文| 蜜桃视频在线网站| 国产精品porn| 国产视频一区三区| 日韩精品永久网址| 美女精品一区二区| 国产探花一区| 四虎成人精品一区二区免费网站| 91成人超碰| 视频福利一区| 亚洲永久av| 三上亚洲一区二区| 久久这里只有精品一区二区| 久久激情综合网| 色狠狠一区二区三区| 亚洲一区二区网站| 91精品啪在线观看国产18| 红杏一区二区三区| 国产精品一二| 国产精品尤物| 欧美一区久久| 日韩二区三区四区| 亚洲香蕉久久| 免费精品视频| 亚洲一区二区三区高清| 亚洲国产一区二区三区在线播放| av一区在线| 日韩在线不卡| 日韩精品电影| av最新在线| 日本在线成人| 美女国产一区| 欧美午夜不卡| 欧美一区三区| 欧美搞黄网站| 午夜精品亚洲| 国产视频一区欧美| 免费在线视频一区| 丝袜美腿亚洲色图| 免费人成精品欧美精品| 国产精品婷婷| 蜜臀av亚洲一区中文字幕| 亚洲免费成人av在线| 日韩中文字幕一区二区高清99| 日韩在线观看一区二区三区| 亚洲欧美网站在线观看| 日韩va亚洲va欧美va久久| 欧美日韩午夜| 欧美激情一区| 国产一区三区在线播放| 狠狠躁少妇一区二区三区| 国产传媒av在线| 色天使综合视频| 亚洲激情久久| 综合精品一区| 国产精品亚洲欧美一级在线| 精品欠久久久中文字幕加勒比| 一区二区三区四区日本视频| 影视先锋久久| 亚洲丝袜啪啪| 国产乱人伦精品一区| 狠狠久久伊人中文字幕| 久久青草久久| 不卡中文一二三区| 亚洲天堂av资源在线观看| 日本91福利区| 国产中文欧美日韩在线| 欧美午夜精彩| 日韩黄色av| 日本黄色精品| 久久都是精品| 久久一区国产| 久久亚洲精品中文字幕蜜潮电影| 亚洲在线观看| 国产精品sss在线观看av| 国产传媒在线观看| 亚洲欧美日本视频在线观看| 国产精品最新| 欧美香蕉视频| 亚洲视频国产| 电影91久久久| 宅男噜噜噜66国产日韩在线观看| 久久精品97| 欧美91福利在线观看| 亚洲另类av| 麻豆网站免费在线观看| 亚洲另类av| 欧美羞羞视频| 日韩avvvv在线播放| 成人国产精品久久| 夜久久久久久| 欧美国产不卡| 在线精品视频在线观看高清| 7777精品| 久久国产日本精品| 欧美久久一区二区三区| 日韩免费小视频| 日本午夜精品久久久久| 丝袜av一区| 国产欧美一区二区三区米奇| 日韩精品一区二区三区免费观看| 日本伊人久久| 久久精品国产大片免费观看| 日韩av中文字幕一区| 日韩精品午夜| 国产乱码精品一区二区亚洲| 欧美日韩激情| 久久97视频| 蜜桃久久av| 理论片午夜视频在线观看| 色狠狠一区二区三区| 极品日韩av| 日韩av在线中文字幕| 婷婷综合电影| 亚洲无线一线二线三线区别av|