注解 | 说明 |
---|---|
@Null | 注解元素必须为null |
@NotNull | 注解元素必须不为null |
@NotBlank | 注解元素为字符串,并且被trim()以后length要大于0 |
@NotEmpty | 注解元素是否为Null或者Empty |
@AssertTrue | 验证注解元素是否为 true |
@AssertFalse | 验证注解元素是否为 false |
@Size(min=, max=) | 注解元素(Array,Collection,Map,String)长度是否在给定的范围之内@Length(min=, max=) |
@Max(value) | 注解的元素必须为数字,且小于等于最大值 |
@Min(value) | 注解的元素必须为数字,且大于等于最小值 |
@DecimalMax(value) | 注解元素必须是一个数字,且小于等于最大值 |
@DecimalMin(value) | 注解元素必须是一个数字,且大于等于最小值 |
@Digits(integer,fraction) | 注解元素必须是一个数字,且在可接受范围 |
@Past | 验证 Date 和 Calendar 对象是否在当前时间之前 |
@Future | 验证 Date 和 Calendar 对象是否在当前时间之后 |
@Pattern(regexp=正则表达式,flag=标志的模式) | 验证 String 对象是否符合正则表达式的规则 |
@Range(min=最小值, max=最大值) | 验证注解的元素值在最小值和最大值之间 |
@Email(regexp=正则表达式,flag=标志的模式) | 验证注解的元素值是Email,也可以通过regexp和flag指定自定义的email格式 |
@Valid | 指定递归验证关联的对象;如用户对象中有个地址对象属性,如果想在验证用户对象时一起验证地址对象的话,在地址对象上加@Valid注解即可级联验证 |
public class PhoneConstraintValidator implements ConstraintValidator<PhoneConstraint , Object> {
/**
* 手机号校验
*/
private final static Pattern CELL_PHONE_NUMBER = Pattern.compile("^1([35789][0-9]|4[579]|66|7[0135678]|9[89])[0-9]{8}$");
/**
* 国内固定电话校验
*/
private final static Pattern FIXED_TELEPHONE_NUMBER = Pattern.compile("^([0-9]{3,4}-)?[0-9]{7,8}$");
private final static Pattern PHONE_AND_TEL = Pattern.compile("^1([35789][0-9]|4[579]|66|7[0135678]|9[89])[0-9]{8}$|^([0-9]{3,4}-)?[0-9]{7,8}$");
@Override
public void initialize(PhoneConstraint constraintAnnotation) {
System.out.println("PhoneConstraint initialize");
}
@Override
public boolean isValid(String value, ConstraintValidatorContext context) {
if (StringUtils.isNotBlank(value)) {
//手机号校验
if (CELL_PHONE_NUMBER.matcher(value).matches()) {
return true;
} else if (PHONE_AND_TEL.matcher(value).matches()) {
return true;
}
// 国内固定号码正则表达式
return FIXED_TELEPHONE_NUMBER.matcher(value).matches();
}
return true;
}
}
@Constraint是最关键的,它表示这个注解是一个验证注解,并且指定了一个实现验证逻辑的验证器。message()指明了验证失败后返回的消息,此方法为@Constraint要求。groups()和payload()也为@Constraint要求。
@Target({ElementType.FIELD, ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
/**
* 指出当前约束是通过`PhoneConstraintValidator.class`来实现的
*/
@Constraint(validatedBy = PhoneConstraintValidator.class)
public @interface PhoneConstraint {
/**
* 配置message信息
* @return
*/
String message() default "请输入正确格式的手机号";
/**
* 分组
* @return
*/
Class<?>[] groups() default {};
Class<? extends Payload>[] payload() default {};
}