參數校驗
- 引入springvalidation依賴
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-validation</artifactId>
</dependency>
-
參數前添加
@Pattern
public Result registry(@Pattern(regexp = "^\\S{5,16}$") String username, @Pattern(regexp = "^\\S{5,16}$") String password) {}
-
類上添加
@Validated
@Validated public class UserController {}
異常:jakarta.validation.ConstraintViolationException: registry.password: 需要匹配正則表達式"^\S{5,16}$", registry.username: 需要匹配正則表達式"^\S{5,16}$"
封裝對象
對于封裝的對象參數:
@PutMapping("/update")
public Result update(@RequestBody @Validated User user) {userService.update(user);return Result.success();
}
@Data
public class User {@NotNullprivate Integer id;private String username;@JsonIgnoreprivate String password;@NotEmpty@Pattern(regexp = "^//S{1,10}$")private String nickname;@NotEmpty@Emailprivate String email;private String user_pic;private LocalDateTime createTime;private LocalDateTime updateTime;
}
分組校驗
多個接口對參數的要求不統一會導致混亂和錯誤
使用分組校驗的方式:
@Data
public class Category {@NotNull(groups = Update.class)private Integer id;@NotEmpty(groups = {Add.class, Update.class})private String categoryName;@NotEmpty(groups = {Add.class, Update.class})private String categoryAlias;public interface Add{}public interface Update{}
}
public Result addCategory(@RequestBody @Validated(Category.Add.class) Category category){}
@PutMapping
public Result update(@RequestBody @Validated(Category.Update.class) Category category) {}
未指定的默認屬于Default
分組,也可以:
@Data
public class Category {@NotNull(groups = Update.class)private Integer id;@NotEmptyprivate String categoryName;@NotEmptyprivate String categoryAlias;public interface Add extend Default{}public interface Update extend Default{}
}
自定義參數校驗
已有的注解不能滿足校驗要求,需要自定義注解
-
首先定義自定義注解
@Documented @Target({ElementType.FIELD}) @Retention(RetentionPolicy.RUNTIME) // 指定校驗規則 @Constraint(validatedBy = {MyValidation.class} ) public @interface Vali {// 校驗失敗后的提示信息String message() default "只能是“已發布”或者“草稿”";// 指定分組Class<?>[] groups() default {};// 獲取附加信息Class<? extends Payload>[] payload() default {}; }
-
定義處理規則
public class MyValidation implements ConstraintValidator<Vali, String> {@Overridepublic boolean isValid(String s, ConstraintValidatorContext constraintValidatorContext) {// 提供校驗規則return "已發布".equals(s) || "草稿".equals(s);} }
-
使用方式和其他注解一致