如果需要自定义一个validator ,步骤如下:
1、编写一个自定义的校验注解,例如@ListValue(values={param1,param2...})。其作用是检验参数是否符合传入的参数。其代码如下,需要注意的有:
1)有些注解存在于validation-api的包中,需要在项目中导入依赖;
2)message的值参照validator源码中的命名格式,按照包名+注解名+message命名。
javax.validation validation-api2.0.1.Final
/自定义校验的过程 @documented @Constraint(validatedBy = {ListValueConstrainValidator.class}) @Target({ElementType.METHOD, ElementType.FIELD, ElementType.ANNOTATION_TYPE, ElementType.CONSTRUCTOR, ElementType.PARAMETER, ElementType.TYPE_USE}) @Retention(RetentionPolicy.RUNTIME) public @interface ListValue { String message() default "{com.atguigu.common.valid.ListValue.message}"; Class>[] groups() default {}; Class extends Payload>[] payload() default {}; int[] vals() default {}; }
2、编写一个自定义的校验器,例如ListValueConstrainValidator。其中initialize方法是初始化方法,将需要用到的数据通过constraintAnnotation.values()方法传入,并放在合适的数据结构中。isValid()方法用于检测数据是否合法。
public class ListValueConstrainValidator implements ConstraintValidator{ private Set set = new HashSet<>(); //初始化方法 @Override public void initialize(ListValue constraintAnnotation) { int[] vals = constraintAnnotation.vals(); for (int val : vals) { set.add(val); } } @Override public boolean isValid(Integer value, ConstraintValidatorContext constraintValidatorContext) { return set.contains(value); } }
3、配置ValidationMessages.properties文件,在里面配置上message的信息。
com.atguigu.common.valid.ListValue.message=必须是提交指定值
这里需要注意到是,如果idea没有设置encoding编码格式为UTF-8将会出现乱码,因此应当先调整编码格式,在file->settings->Editor->Code style->File Encodings将所有调成UTF-8,随后重启项目。
4、将注解写到字段上,例如这里设置为0和1,当参数检验到不是0和1时,将会返回“必须是提交指定值”。
@ListValue(vals = {0,1}) private Integer showStatus;
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)