有时候现有的验证注解满足不了部分业务需求,所以就有了扩展自定义注解。
1.添加注解类
import javax.validation.Constraint;import javax.validation.Payload;import java.lang.annotation.Documented;import java.lang.annotation.Retention;import java.lang.annotation.Target;import static java.lang.annotation.ElementType.*;import static java.lang.annotation.ElementType.PARAMETER;import static java.lang.annotation.RetentionPolicy.RUNTIME;/** * User: zhoujingjie * Date: 14-10-31 * Time: 下午6:00 */@Target({ METHOD, FIELD, ANNOTATION_TYPE, CONSTRUCTOR, PARAMETER })@Retention(RUNTIME)@Documented@Constraint(validatedBy = { PhoneNoValidator.class})public @interface PhoneNo { //默认错误消息 String message() default "手机号码错误"; //分组 Class [] groups() default { }; //负载 Class [] payload() default { }; //指定多个时使用 @Target({ FIELD, METHOD, PARAMETER, ANNOTATION_TYPE }) @Retention(RUNTIME) @Documented @interface List { PhoneNo[] value(); }}
自定义注解需要自定义validator,所以注解里变量也不是强制需要,可以就一个message也可以
2.添加PhoneNoValidator
import org.apache.commons.lang.StringUtils;import javax.validation.ConstraintValidator;import javax.validation.ConstraintValidatorContext;/** * 手机号码验证 * User: zhoujingjie * Date: 14-11-1 * Time: 上午10:45 */public class PhoneNoValidator implements ConstraintValidator{ @Override public void initialize(PhoneNo constraintAnnotation) { } @Override public boolean isValid(String value, ConstraintValidatorContext context) { if(StringUtils.isEmpty(value)) return true; if(value.matches("((\\+86)|(86))?1[3|4|5|8]\\d{9}")){ return true; } return false; }}
3.最后
完成,一个简单的自定义注解就完工了。使用方式与其他注解一模一样