當前位置:
首頁 >
前端技术
> javascript
>内容正文
javascript
SpringBoot中的Validator参数校验器——通过注解的方式控制controler接收参数的规则
生活随笔
收集整理的這篇文章主要介紹了
SpringBoot中的Validator参数校验器——通过注解的方式控制controler接收参数的规则
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
前言
在日常的接口開發中,經常要對接口的參數做校驗,例如,登錄的時候要校驗用戶名密碼是否為空。但是這種日常的接口參數校驗太煩鎖了,代碼繁瑣又多。
Validator框架就是為了解決開發人員在開發的時候少寫代碼,提升開發效率的;它專門用來做接口參數的校驗的,例如
email校驗、用戶名長度必須位于6到12之間等等。
注意,SpringBoot最新版本已經移除了自帶的Validator依賴,因此發現沒有該依賴后請導入以下依賴。
<!-- validation依賴 --> <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-validation</artifactId><version>2.3.4.RELEASE</version> </dependency>Validator參數校驗器
創建一個vo類,用來做參數的注解
@Data @ApiModel("小車狀態") public class CarStatus {@NotEmpty(message = "小車id不能為空")@Length(max = 11,message = "id長度不能超過11位")@ApiModelProperty("小車id")private int CarId;@NotEmpty(message = "小車狀態不能為空")@Pattern(regexp = "",message = "小車狀態有誤")@ApiModelProperty("小車狀態")private String CarAction; }使用:
@PostMapping("SetCarMove") public CarStatus firstQuestion(@RequestBody @Validated CarStatus car) {// 相當于省略下面兩句話/*if (car == null || (!"Start".equals(car.getCarAction()) && !"Stop".equals(car.getCarAction()))) {throw new CarStatusException(StatusCode.CAR_STATUS_ERROR,"參數不正確");}*/System.out.println(car);return car; }常用注解
@null 驗證對象是否為空 @notnull 驗證對象是否為非空 @asserttrue 驗證 boolean 對象是否為 true @assertfalse 驗證 boolean 對象是否為 false @min 驗證 number 和 string 對象是否大等于指定的值 @max 驗證 number 和 string 對象是否小等于指定的值 @decimalmin 驗證 number 和 string 對象是否大等于指定的值,小數存在精度 @decimalmax 驗證 number 和 string 對象是否小等于指定的值,小數存在精度 @size 驗證對象(array,collection,map,string)長度是否在給定的范圍之內 @digits 驗證 number 和 string 的構成是否合法 @past 驗證 date 和 calendar 對象是否在當前時間之前 @future 驗證 date 和 calendar 對象是否在當前時間之后 @pattern 驗證 string 對象是否符合正則表達式的規則 @Email 驗證郵箱例子
@size (min=3, max=20, message="用戶名長度只能在3-20之間") @size (min=6, max=20, message="密碼長度只能在6-20之間") @pattern (regexp="[a-za-z0-9._%+-]+@[a-za-z0-9.-]+\\.[a-za-z]{2,4}", message="郵件格式錯誤") @Length(min = 5, max = 20, message = "用戶名長度必須位于5到20之間") @Email(message = "比如輸入正確的郵箱") @NotNull(message = "用戶名稱不能為空") @Max(value = 100, message = "年齡不能大于100歲") @Min(value= 18 ,message= "必須年滿18歲!" ) @AssertTrue(message = "bln4 must is true") @AssertFalse(message = "blnf must is falase") @DecimalMax(value="100",message="decim最大值是100") DecimalMin(value="100",message="decim最小值是100") @NotNull(message = "身份證不能為空") @Pattern(regexp="^(\\d{18,18}|\\d{15,15}|(\\d{17,17}[x|X]))$", message="身份證格式錯誤")高階:自定義validator
因為validator框架支持的注解有限,不可能方方面面都支持,故需要自定義注解。
以手機號碼為例子,寫一個校驗的validator注解。
步驟一:寫一個注解
@Documented @Constraint(validatedBy = CarStateValidator.class) @Target({ElementType.METHOD, ElementType.FIELD}) @Retention(RetentionPolicy.RUNTIME) public @interface CarState {String message() default "請輸入正確的手機號碼";Class<?>[] groups() default {};Class<? extends Payload>[] payload() default {};@Documented@Retention(RetentionPolicy.RUNTIME)@Target({ElementType.METHOD,ElementType.FIELD,ElementType.ANNOTATION_TYPE,ElementType.CONSTRUCTOR,ElementType.PARAMETER})@interface List {CarState[] value();} }步驟二:寫出注解的實現類
public class CarStateValidator implements ConstraintValidator<CarState,String> {private static final Pattern CAR_STATE_PATTERN = Pattern.compile("^(Start)|(Stop)$");@Overridepublic boolean isValid(String s, ConstraintValidatorContext constraintValidatorContext) {if (s == null || s.length() == 0){return true;}Matcher m = CAR_STATE_PATTERN.matcher(s);return m.matches();}@Overridepublic void initialize(CarState constraintAnnotation) {} }步驟三:給vo類對應的屬性加上注解
@CarState總結
以上是生活随笔為你收集整理的SpringBoot中的Validator参数校验器——通过注解的方式控制controler接收参数的规则的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: AIX 提示符PS1设置
- 下一篇: Spring 之MultipartFil