當(dāng)前位置:
首頁 >
前端技术
> javascript
>内容正文
javascript
SpringBoot中的Validator参数校验器——通过注解的方式控制controler接收参数的规则
生活随笔
收集整理的這篇文章主要介紹了
SpringBoot中的Validator参数校验器——通过注解的方式控制controler接收参数的规则
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
前言
在日常的接口開發(fā)中,經(jīng)常要對(duì)接口的參數(shù)做校驗(yàn),例如,登錄的時(shí)候要校驗(yàn)用戶名密碼是否為空。但是這種日常的接口參數(shù)校驗(yàn)太煩鎖了,代碼繁瑣又多。
Validator框架就是為了解決開發(fā)人員在開發(fā)的時(shí)候少寫代碼,提升開發(fā)效率的;它專門用來做接口參數(shù)的校驗(yàn)的,例如
email校驗(yàn)、用戶名長(zhǎng)度必須位于6到12之間等等。
注意,SpringBoot最新版本已經(jīng)移除了自帶的Validator依賴,因此發(fā)現(xiàn)沒有該依賴后請(qǐng)導(dǎo)入以下依賴。
<!-- validation依賴 --> <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-validation</artifactId><version>2.3.4.RELEASE</version> </dependency>Validator參數(shù)校驗(yàn)器
創(chuàng)建一個(gè)vo類,用來做參數(shù)的注解
@Data @ApiModel("小車狀態(tài)") public class CarStatus {@NotEmpty(message = "小車id不能為空")@Length(max = 11,message = "id長(zhǎng)度不能超過11位")@ApiModelProperty("小車id")private int CarId;@NotEmpty(message = "小車狀態(tài)不能為空")@Pattern(regexp = "",message = "小車狀態(tài)有誤")@ApiModelProperty("小車狀態(tài)")private String CarAction; }使用:
@PostMapping("SetCarMove") public CarStatus firstQuestion(@RequestBody @Validated CarStatus car) {// 相當(dāng)于省略下面兩句話/*if (car == null || (!"Start".equals(car.getCarAction()) && !"Stop".equals(car.getCarAction()))) {throw new CarStatusException(StatusCode.CAR_STATUS_ERROR,"參數(shù)不正確");}*/System.out.println(car);return car; }常用注解
@null 驗(yàn)證對(duì)象是否為空 @notnull 驗(yàn)證對(duì)象是否為非空 @asserttrue 驗(yàn)證 boolean 對(duì)象是否為 true @assertfalse 驗(yàn)證 boolean 對(duì)象是否為 false @min 驗(yàn)證 number 和 string 對(duì)象是否大等于指定的值 @max 驗(yàn)證 number 和 string 對(duì)象是否小等于指定的值 @decimalmin 驗(yàn)證 number 和 string 對(duì)象是否大等于指定的值,小數(shù)存在精度 @decimalmax 驗(yàn)證 number 和 string 對(duì)象是否小等于指定的值,小數(shù)存在精度 @size 驗(yàn)證對(duì)象(array,collection,map,string)長(zhǎng)度是否在給定的范圍之內(nèi) @digits 驗(yàn)證 number 和 string 的構(gòu)成是否合法 @past 驗(yàn)證 date 和 calendar 對(duì)象是否在當(dāng)前時(shí)間之前 @future 驗(yàn)證 date 和 calendar 對(duì)象是否在當(dāng)前時(shí)間之后 @pattern 驗(yàn)證 string 對(duì)象是否符合正則表達(dá)式的規(guī)則 @Email 驗(yàn)證郵箱例子
@size (min=3, max=20, message="用戶名長(zhǎng)度只能在3-20之間") @size (min=6, max=20, message="密碼長(zhǎng)度只能在6-20之間") @pattern (regexp="[a-za-z0-9._%+-]+@[a-za-z0-9.-]+\\.[a-za-z]{2,4}", message="郵件格式錯(cuò)誤") @Length(min = 5, max = 20, message = "用戶名長(zhǎng)度必須位于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="身份證格式錯(cuò)誤")高階:自定義validator
因?yàn)関alidator框架支持的注解有限,不可能方方面面都支持,故需要自定義注解。
以手機(jī)號(hào)碼為例子,寫一個(gè)校驗(yàn)的validator注解。
步驟一:寫一個(gè)注解
@Documented @Constraint(validatedBy = CarStateValidator.class) @Target({ElementType.METHOD, ElementType.FIELD}) @Retention(RetentionPolicy.RUNTIME) public @interface CarState {String message() default "請(qǐng)輸入正確的手機(jī)號(hào)碼";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();} }步驟二:寫出注解的實(shí)現(xiàn)類
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類對(duì)應(yīng)的屬性加上注解
@CarState總結(jié)
以上是生活随笔為你收集整理的SpringBoot中的Validator参数校验器——通过注解的方式控制controler接收参数的规则的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: AIX 提示符PS1设置
- 下一篇: java计算机毕业设计新生报到管理系统源