第一步:引入依赖
<!--validate依赖 校验-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-validation</artifactId>
</dependency>
提供了很多注解来辅助校验
在实体类字段上使用(请求过程中会自动校验)
@Data
public class LoginVo {
@NotNull
private String mobile;
@NotNull//不为null
@Length(min = 32)//长度最小为32
private String password;
}
注解内容:
自定义注解@IsMobile
@Data
public class LoginVo {
@NotNull
@IsMobile
private String mobile;
@NotNull
@Length(min = 32)
private String password;
}
通过validate中的注解直接复制创建注解:
/**
* @author 创建自定义注解
* @date 2022/1/11 - 15:18
*/
@Target({ METHOD, FIELD, ANNOTATION_TYPE, CONSTRUCTOR, PARAMETER, TYPE_USE })
@Retention(RUNTIME)
@Documented
@Constraint(validatedBy = {IsMobileValidator.class})//IsMobileValidator注解校验的类
public @interface IsMobile {
boolean required() default true;//判断是否必填
String message() default "手机号码格式错误";
Class<?>[] groups() default { };
Class<? extends Payload>[] payload() default { };
}
自定义校验规则
/**
* @description: 自定义注解的校验规则
* @author 孙
* @date 2022/1/11 15:20
* @version 1.0
*/
public class IsMobileValidator implements ConstraintValidator<IsMobile,String> {
private boolean required = false;
@Override
public void initialize(IsMobile constraintAnnotation) {
required = constraintAnnotation.required();
}
@Override
public boolean isValid(String value, ConstraintValidatorContext context) {
if (required){
return ValidatorUtil.isMobile(value);
}else {
if (StringUtils.isEmpty(value)){
return true;
}else {
return ValidatorUtil.isMobile(value);
}
}
}
}
/**
* @description: 校验工具类
* @author 孙
* @date 2022/1/11 14:44
* @version 1.0
*/
public class ValidatorUtil {
//使用正则表达式校验手机号码
private static final Pattern mobile_pattern = Pattern.compile("[1]([3-9])[0-9]{9}$");
public static boolean isMobile(String mobile){
if (StringUtils.isEmpty(mobile)) {
return false;
}
Matcher matcher = mobile_pattern.matcher(mobile);
return matcher.matches();
}
}
测试
@RequestMapping("/doLogin")
@ResponseBody
public RespBean doLogin(@Valid LoginVo loginVo){//@Valid启动注解校验
log.info(loginVo.toString());//使用@Slf4j注解打印日志
return userService.login(loginVo);
}