您好,登錄后才能下訂單哦!
本篇內容介紹了“SprintBoot使用Validation的原因和用法”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!
在開發過程中有沒有使用一堆的if來判斷字段是否為空、電話號碼是否正確、某個輸入是否符合長度等對字段的判斷。這樣的代碼可讀性差,而且還不美觀,那么使用Validation就可以完美解決這個問題。
引入validation依賴
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-validation</artifactId> </dependency>
在需要校驗的實體類添加注解
@Data public class User { private String id; @NotNull(message = "姓名不能為空") private String name; }
在Controller類的方法入參增加@Valid
@PostMapping(path = "") public RestResponse save(@Valid @RequestBody User user){ return ResponseFactory.getOkResponse(); }
使用全局異常處理異常信息
全局異常處理在上一篇文章有介紹到,具體怎么使用可以參考:SpringBoot全局異常處理
@ExceptionHandler(MethodArgumentNotValidException.class) public RestResponse paramExceptionHandler(MethodArgumentNotValidException e) { BindingResult bindingResult = e.getBindingResult(); if (bindingResult.hasErrors()) { List<ObjectError> objectError = bindingResult.getAllErrors(); if (!objectError.isEmpty()) { return ResponseFactory.getErrorMessage(objectError.stream().map(obj -> { FieldError fieldError = (FieldError) obj; return String.format("%s-%s", fieldError.getField(), fieldError.getDefaultMessage()); }).collect(Collectors.joining(";"))); } } return ResponseFactory.getErrorMessage("參數請求錯誤!"); }
入參:
{ "id":"as", "name":null }
出參:
{ "code": "1", "message": "name-姓名不能為空", "data": null }
從出參可以看出,驗證已經生效。這里需要注意的是,如果實體類中嵌套了實體類,需要在嵌套的類上加@Valid
才會對嵌套的實體類校驗。
@Data public class User { private String id; @NotNull(message = "姓名不能為空") private String name; @NotNull(message = "地址信息不能為空!") private Address address; } @Data public class Address { private String id; @NotEmpty(message = "省份不能為空!") private String province; }
如上只是在address
上面加了非空校驗,在Address
類中的province
添加了非空校驗,如果不再address
加@Valid
,入參不傳入address
信息,如下:
入參: { "id":"as", "name":null } 出參: { "code": "1", "message": "name-姓名不能為空;address-地址信息不能為空!", "data": null }
入參加上address
的空信息,入參出參如下:
入參: { "id":"as", "name":null, "address":{ } } 出參: { "code": "1", "message": "name-姓名不能為空", "data": null }
可以看出在address
上不加@Valid
注解,對嵌套類的校驗是不生效的,接下來@Valid
注解加上看下結果:
@Data public class User { private String id; @NotNull(message = "姓名不能為空") private String name; @NotNull(message = "地址信息不能為空!") @Valid private Address address; }
入參不變,出參如下:
{ "code": "1", "message": "address.province-省份不能為空!;name-姓名不能為空", "data": null }
從結果可以看出,嵌套類中的校驗已經生效。 上面的示例只用到了@NotNull
、@NotEmpty
注解,還有一些常用的注解,這里就不一一演示了,可以自己測試下。下面貼出一些常用校驗注解: |注解| 作用| |:--|:--| |@NotNull| 值不能為空| |@Null |值必須為空| |@Pattern(regex=) |字符串必須匹配正則表達式 |@Size(min, max)| 集合或者數組元素的數量必須在min和max之間 |@CreditCardNumber(ignoreNonDigitCharacters=)| 字符串必須是信用卡號,按找美國的標準驗證 |@Email |字符串必須是Email地址 |@Length(min, max)| 檢查字符串的長度 |@NotBlank| 字符串不能為空串 |@NotEmpty| 字符串不能為null, 集合或者數組的 size 不能為空 |@Range(min, max)| 數字必須大于min, 小于max |@SafeHtml |字符串必須是安全的html |@URL| 字符串必須是合法的URL |@AssertFalse| 值必須是false |@AssertTrue |值必須是true |@DecimalMax(value=, inclusive=) |值必須小于等于(inclusive=true)/小于(inclusive=false)屬性指定的值,也可以注釋在字符串類型的屬性上。 |@DecimalMin(value=, inclusive=) |值必須大于等于(inclusive=true)/小于(inclusive=false)屬性指定的值,也可以注釋在字符串類型的屬性上。 |@Digist(integer=,fraction=) |數字格式檢查。integer指定整數部分的最大長度,fraction指定小數部分的最大長度 |@Future |時間必須是未來的 |@Past| 事件必須是過去的 |@Max(value=)| 值必須小于等于value指定的值。不能注解在字符串類型屬性上。 |@Min(value=) |值必須小于等于value指定的值。不能注解在字符串類型屬性上。
“SprintBoot使用Validation的原因和用法”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注億速云網站,小編將為大家輸出更多高質量的實用文章!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。