本文共 1908 字,大约阅读时间需要 6 分钟。
问题:如果我们校验如下的方式是可以用正则表达式,可是有时候我们的业务只有正则也完成不了,所以我们需要自定义校验注解
/**	 * 显示状态[0-不显示;1-显示]	 */	 	@ListValue(vals={   0,1})	private Integer showStatus;   @ListValue(vals={0,1})就是我们需要编写的自定义校验注解   编写自定义校验注解思路:
1)编写一个自定义的校验注解 2)编写一个自定义的校验器 3)关联自定义的校验器和自定义的校验注解@ListValue(vals={   0,1})	private Integer showStatus;   //原信息数据 //可以标注在那些位置@Target({   ElementType.METHOD, ElementType.FIELD, ElementType.ANNOTATION_TYPE, ElementType.CONSTRUCTOR, ElementType.PARAMETER})//运行时获取到@Retention(RetentionPolicy.RUNTIME)@Documented//使用哪个校验器进行校验@Constraint( validatedBy = {   ListValueConstraintValidator.class})public @interface ListValue {      //校验出错以后去哪取(ValidationMessages.properties)取到javax.validation.constraints.NotNull.message这一个数据 //根据上面的思路,我们就可以自己在resources中创建ValidationMessages.properties,配置如下的内容    String message() default "{com.atstudying.common.valid.ListValue.message}";    //可以实现分组校验    Class   [] groups() default {   };    //自定义一些负载信息    Class   [] payload() default {   };    int [] vals() default {   };}   

 ListValueConstraintValidator .java   public class ListValueConstraintValidator implements ConstraintValidator{ private Set set=new HashSet<>(); //初始化方法 @Override public void initialize(ListValue constraintAnnotation) { //获取详细信息vals={0,1}0,1 int [] vals=constraintAnnotation.vals(); for (int val :vals){ set.add(val); } } //判断是否校验成功 @Override public boolean isValid(Integer value, ConstraintValidatorContext constraintValidatorContext) { //如果我们获取值为3=value,传进来判断不会等于0,1就是返回false return set.contains(value); }} 
ListValue
@Constraint(        // Class   >[] validatedBy();        //可以指定多个不同的校验器,适配不同类型的校验        validatedBy = {   ListValueConstraintValidator.class}) 转载地址:http://zzhq.baihongyu.com/