为了优化参数校验,避免每次都判断是否为空或者格式是否正确
1.pom.xml引入
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-validation</artifactId>
</dependency>
2.在实体类型的参数前添加注解
3.在实体中加入校验的注解
4.编写@IsMobile 编译器
@Target({ METHOD, FIELD, ANNOTATION_TYPE, CONSTRUCTOR, PARAMETER })
@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 { };
}
5.编写IsMobileValidator校验器
public class IsMobileValidator implements ConstraintValidator<IsMobile,String>{
private boolean required = false;//不能为空
//初始化
public void initialize(IsMobile constraintAnnotation){
required = constraintAnnotation.required(); //是否为空
}
public boolean isValid(String value, ConstraintValidatorContext context){
if (required){//不可以为空
return ValidatorUtil.isMobile(value);
}else {//可以为空
if (StringUtils.isEmpty(value)){//真的为空就返回true
return true;
}else {//不为空就判断一下格式
return ValidatorUtil.isMobile(value);
}
}
}
}
6.ValidatorUtil:判断格式的工具类
public class ValidatorUtil {//判断格式
//开头是数字
private static final Pattern mobile_pattern = Pattern.compile("1\\d{10}");
public static boolean isMobile(String src){
if (StringUtils.isEmpty(src)){
return false;
}
Matcher m = mobile_pattern.matcher(src);
return m.matches();
}
}
写好后,Controller中这些参数校验都省略了
只留下登录的语句,是不是很清爽
@RequestMapping("/do_login")
@ResponseBody
public Result<Boolean> doLogin(HttpServletResponse response,@Valid LoginVo loginVo){
log.info(loginVo.toString());
//登录
miaoshaUserService.login(response,loginVo);
return Result.success(true);
}