亚洲精品久久久中文字幕-亚洲精品久久片久久-亚洲精品久久青草-亚洲精品久久婷婷爱久久婷婷-亚洲精品久久午夜香蕉

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

Spring boot validation校驗方法實例

瀏覽:2日期:2023-03-24 16:57:21
前言

Spring boot validation校驗方法實例

接觸springboot一年多,是時候擺脫這種校驗方式了233 ,每個參數都if判斷,一眼看過去就是很low的程序員。

Validation有了這個插件就再也不用這樣去校驗參數了,可以讓我們在項目中不用浪費很多時間在參數校驗這里,從而更專注于業務邏輯

正文

首先引入依賴

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

這里創建一個用戶的DTO對象

@Data@ApiModel('用戶-表單對象')public class SportsUserCreatForm{ @ApiModelProperty(value='用戶唯一標識',example = '0') @NotNull(groups = {Update.class}) private long id; @ApiModelProperty(value = '所屬機構唯一標識(冗余字段)', example = '0') private long organizationId; @ApiModelProperty('登錄用戶名') @NotBlank(message = '用戶名不能為空') @Length(max = 10, message = '用戶名最長為10位') private String loginName; @ApiModelProperty('密碼') private String password; @ApiModelProperty('手機號') private String phone; @ApiModelProperty('郵箱') private String email; @ApiModelProperty('性別( ’MALE’, ’FEMALE’ )') @NotNull(message = '用戶性別不能為空') private SportsUserEnumGender gander; @ApiModelProperty(value = '出生日期-13位時間戳',example = '0') private long birthday; @ApiModelProperty('身份證號') private String idNumber; @ApiModelProperty('用戶昵稱') private String nickname; }

在controller層添加@Validated注解,添加注解之后spring就會逐個校驗DTO中加了校驗注解的字段,完全通過才可以進入業務處理,否則就會拋出MethodArgumentNotValidException異常

@PostMapping('user/add') @RequiresAuthentication @ApiOperation('添加用戶') public SportsUser addUser(@Validated @RequestBody SportsUserCreatForm user) throws Exception{ return userBiz.addUser(user); }

一般項目來說拋出異常都會有約定好的JSON格式返回錯誤碼和錯誤信息,如果不處理就無法按照約定格式返回。這里我們可以通過聲明全局異常處理類來攔截異常并將異常處理成前端能操作的JSON數據。(這里只需要關注MethodArgumentNotValidException異常)

@Slf4j@Order(Ordered.HIGHEST_PRECEDENCE)@RestControllerAdvicepublic class GlobalExceptionAdvice { @ExceptionHandler(MethodArgumentNotValidException.class) @ResponseBody public ResponseEntity<Object> handleBeanValidation(HttpServletResponse res, MethodArgumentNotValidException e) throws Exception{ res.setStatus(HttpStatus.OK.value()); List<ObjectError> errors = e.getBindingResult().getAllErrors(); ObjectError error = errors.get(0);// 如果有多個異常,這里只取第一個異常。沒有必要把所有異常都拋出(錯就是錯,第一個校驗都沒通過,自然也輪不到第二個校驗。) String json = JsonUtils.obj2json(error); Map map = JsonUtils.json2map(json); OkMessage result = new OkMessage(); result.setMsg('請求參數錯誤'e.getBindingResult().getFieldError().getDefaultMessage() + ']'); result.setCode('PARAM-000001'); return new ResponseEntity<>(result, HttpStatus.OK); }}分組校驗

有的人就要發問了,'啊,你這校驗不行啊,我在添加的時候id是自動生成的不需要校驗,編輯的時候就需要校驗id了,我是不是要建兩個一模一樣的DTO,這樣豈不是顯得我很憨?!這不是增加無用代碼嗎?差評!'

其實不然,在此我們可以用到 groups 屬性來解決此場景下的問題。

聲明分組

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

import javax.validation.groups.Default; /** * 數據新增分組 */public interface Create extends Default { }

import javax.validation.groups.Default; /** * 數據更新分組 */public interface Update extends Default { }

Spring boot validation校驗方法實例

修改Controller中的@Validated注解,聲明校驗分組(下面用的是Create.class所以并不會校驗id)

@PostMapping('user/add') @RequiresAuthentication @ApiOperation('添加用戶') public SportsUser addUser(@Validated(Create.class) @RequestBody SportsUserCreatForm user) throws Exception{ return userBiz.addUser(user); }下面附上注解說明 驗證注解 驗證的數據類型 說明 @AssertFalse Boolean,boolean 驗證注解的元素值是false @AssertTrue Boolean,boolean 驗證注解的元素值是true @NotNull 任意類型 驗證注解的元素值不是null @Null 任意類型 驗證注解的元素值是null @Min(value=值) BigDecimal,BigInteger, byte,short, int, long,等任何Number或CharSequence(存儲的是數字)子類型 驗證注解的元素值大于等于@Min指定的value值 @Max(value=值) 和@Min要求一樣 驗證注解的元素值小于等于@Max指定的value值 @DecimalMin(value=值) 和@Min要求一樣 驗證注解的元素值大于等于@ DecimalMin指定的value值 @DecimalMax(value=值) 和@Min要求一樣 驗證注解的元素值小于等于@ DecimalMax指定的value值 @Digits(integer=整數位數, fraction=小數位數) 和@Min要求一樣 驗證注解的元素值的整數位數和小數位數上限 @Size(min=下限, max=上限) 字符串、Collection、Map、數組等 驗證注解的元素值的在min和max(包含)指定區間之內,如字符長度、集合大小 @Past java.util.Date,java.util.Calendar;Joda Time類庫的日期類型 驗證注解的元素值(日期類型)比當前時間早 @Future 與@Past要求一樣 驗證注解的元素值(日期類型)比當前時間晚 @NotBlank CharSequence子類型 驗證注解的元素值不為空(不為null、去除首位空格后長度為0),不同于@NotEmpty,@NotBlank只應用于字符串且在比較時會去除字符串的首位空格 @Length(min=下限, max=上限) CharSequence子類型 驗證注解的元素值長度在min和max區間內 @NotEmpty CharSequence子類型、Collection、Map、數組 驗證注解的元素值不為null且不為空(字符串長度不為0、集合大小不為0) @Range(min=最小值, max=最大值) BigDecimal,BigInteger,CharSequence, byte, short, int, long等原子類型和包裝類型 驗證注解的元素值在最小值和最大值之間 @Email(regexp=正則表達式,flag=標志的模式) CharSequence子類型(如String) 驗證注解的元素值是Email,也可以通過regexp和flag指定自定義的email格式 @Pattern(regexp=正則表達式,flag=標志的模式) String,任何CharSequence的子類型 驗證注解的元素值與指定的正則表達式匹配 @Valid 任何非原子類型 指定遞歸驗證關聯的對象如用戶對象中有個地址對象屬性,如果想在驗證用戶對象時一起驗證地址對象的話,在地址對象上加@Valid注解即可

此處只列出Hibernate Validator提供的大部分驗證約束注解,請參考hibernate validator官方文檔了解其他驗證約束注解和進行自定義的驗證約束注解定義。

常用的幾個:1.@NotNull:不能為null,但可以為empty('',' ',' ')2.@NotEmpty:不能為null,而且長度必須大于0 (' ',' ')3.@NotBlank:只能作用在String上,不能為null,而且調用trim()后,長度必須大于0('test') 即:必須有實際字符總結

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

標簽: Spring
相關文章:
主站蜘蛛池模板: 国产精品jizz视频 | 国产线视频精品免费观看视频 | 香蕉视频性 | 欧美激情视频网址 | 成人乱码一区二区三区四区 | 国产黄色大片在线观看 | 日本一级毛片高清免费观看视频 | 国产精品夜色视频一级区 | 99久久一香蕉国产线看观看 | s级毛片 | 成人免费淫片95视频观看网站 | japanese色国产在线看视频 | 国产91在线chines看 | 日本高清αv毛片免费 | 色婷婷中文网 | 精品无人区一区二区三区 | 国内成人啪啪网站 | 7m凹凸国产刺激在线视频 | 久久婷婷在线 | 国产成人啪午夜精品网站 | 精品成人资源在线观看 | 国产一二三区四区乱码2021 | 一级毛片免费毛片一级毛片免费 | 亚洲va欧美va国产 | 欧美成人a级猛男视频片 | 亚洲国产激情在线一区 | 亚洲女同做爰 | 自偷自拍三级全三级视频 | 另类bdsm欧美变态 | 欧美三级不卡 | 亚洲综合激情五月色播 | 一级片小视频 | 日本一级毛片视频无遮挡免费 | 成人免费淫片95视频观看网站 | 九九九精品视频免费 | 黄色网址免费看 | 一级毛片免费全部播放完整 | 在线xxxx| 国产人va在线 | 国产原创在线观看 | 亚洲精品一区二 |