有时候现有的验证注解满足不了部分业务需求,所以就有了扩展自定义注解。
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<? extends Payload>[] 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<PhoneNo,String> { @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.最后
完成,一个简单的自定义注解就完工了。使用方式与其他注解一模一样
时间: 2024-10-18 01:27:26