JSR303自定义校验注解

本文介绍了如何在Java中创建自定义校验注解ListValue,用于检查`showStatus`字段是否为0或1。步骤包括创建注解、定义验证器、关联验证器和在字段上应用注解。
摘要由CSDN通过智能技术生成

        使用JSR303校验注解可以帮助我们做数据校验,但是遇到一些特点的需求就需要编写自定义校验注解。现在我有个需求,我的一个字段 private Integer showStatus; 我想校验是0或1。

自定义校验的实现:

1、编写一个自定义的校验注解

        新建一个注解

     
@Target({ METHOD, FIELD, ANNOTATION_TYPE, CONSTRUCTOR, PARAMETER, TYPE_USE })
@Retention(RUNTIME)
@Documented
@Constraint(validatedBy = {})
public @interface ListValue {
    String message() default "{com.vident.common.validator.ListValue.message}";

    Class<?>[] groups() default { };

    Class<? extends Payload>[] payload() default { };

    int[] values() default { };
}

        在resource目录下新建一个文件ValidationMessages.properties,里边内容填写为:        com.vident.common.validator.ListValue.message=必须提交指定的值

这里对应 String message() default "{com.vident.common.validator.ListValue.message}";

如果没指定message,当校验不通过会默认的抛出ValidationMessages.properties文件里对应的信息。

2、编写一个自定义的校验器
public class ListvaluesConstraintValidator implements ConstraintValidator<ListValue,Integer> {
    private Set<Integer> set = new HashSet<>();

    @Override
    public void initialize(ListValue constraintAnnotation) {
        int[] values = constraintAnnotation.values();
        if(values.length> 0){
            for(int value : values){
                set.add(value);
            }
        }
    }

    @Override
    public boolean isValid(Integer value, ConstraintValidatorContext context) {
        return set.contains(value);
    }
}

ConstraintValidator<ListValue,Integer>这里第一个参数指定我自己定义的注解ListValue,第二个参数我指定要校验的类型为Integer。

3、关联自定义的校验器和自定义校验注解

在自定义注解的@Constraint(validatedBy = {ListvaluesConstraintValidator.class })中添加刚刚写的自定义校验器。

4、使用自定义注解
	@ListValue(values = {0,1})
	private Integer showStatus;

这样我们就可以指定该字段要校验是否是0或1了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值