编写一个校验手机号格式是否正确的校验器。背景:用户登录页面传入手机号作为账号,后端验证手机号格式是否正确
1.校验的数据
loginVo.java
public class LoginVo {
@IsMobile
private String mobile;
}
@IsMobile为自定义校验器
2.在Controller中开启校验
loginController.java
@Controller
@RequestMapping("/login")
public class LoginController {
@RequestMapping("/do_login")
@ResponseBody
public Result<Boolean> doLogin(@Valid LoginVo loginVo) { //使用 @Valid 开启校验
..... //登录处理代码
}
}
}
3.编写一个校验是否是手机号的验证类
ValidatorUtil.java
import org.apache.commons.lang3.StringUtils;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class ValidatorUtil {
//一个简单的校验,主要是看效果,这里的正则不要介意
private static final Pattern moblie_pattern = Pattern.compile("1\\d{10}");
//StringUtils为commons包中工具类
public static Boolean isMobile(String str){
if(StringUtils.isEmpty(str)){
return false;
}
//验证正则表达式,并返回ture/false
Matcher m = moblie_pattern.matcher(str);
return m.matches();
}
}
4.接下来是我们的重点,编写一个@IsMobile的自定义校验器
IsMobile.java
import static java.lang.annotation.ElementType.ANNOTATION_TYPE;
import static java.lang.annotation.ElementType.CONSTRUCTOR;
import static java.lang.annotation.ElementType.FIELD;
import static java.lang.annotation.ElementType.METHOD;
import static java.lang.annotation.ElementType.PARAMETER;
import static java.lang.annotation.RetentionPolicy.RUNTIME;
import java.lang.annotation.Documented;
import java.lang.annotation.Retention;
import java.lang.annotation.Target;
import javax.validation.Constraint;
import javax.validation.Payload;
/**
* @author Hiseico
* @create 2018-08-08 下午9:57
* @desc 自定义校验器
**/
@Target({ METHOD, FIELD, ANNOTATION_TYPE, CONSTRUCTOR, PARAMETER })
@Retention(RUNTIME)
@Documented
//校验类
@Constraint(validatedBy = {IsMobileValidator.class })
public @interface IsMobile {
//默认为true
boolean required() default true;
//提示信息
String message() default "手机号码格式错误";
Class<?>[] groups() default {};
Class<? extends Payload>[] payload() default {};
}
IsMobileValidator.java
import cn.sitcat.util.ValidatorUtil;
import org.apache.commons.lang3.StringUtils;
import javax.validation.ConstraintValidator;
import javax.validation.ConstraintValidatorContext;
/**
* @author Hiseico
* @create 2018-08-08 下午10:02
* @desc 自定义校验器的校验类
**/
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 constraintValidatorContext) {
if(required){
//调用第3步 中的校验类的校验方法进行判断是否是手机号
return ValidatorUtil.isMobile(value);
}else {
if(StringUtils.isEmpty(value)){
return true;
}else{
return ValidatorUtil.isMobile(value);
}
}
}
}
网友评论