【通用技术】自定义注解完成303校验

本文介绍了如何在Java中自定义注解完成303校验,包括创建ListValue注解、ListConstraintValidator类定义校验规则以及设置ValidationMessages.properties文件。
摘要由CSDN通过智能技术生成

自定义注解完成个性化303校验

使用场景:当我们需要对实体类字段进行303校验,但是现有注解无法满足我们的个性化校验时,可以新建注解,完成自定义校验。

步骤

这里我们定义一个注解,用于校验某个字段值是否为指定的值。

一、自定义注解。可参照已有注解来定义,如NotBlank

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

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

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

    int[] value() default {};
}

说明:
1、@Constraint(validatedBy = {ListConstraintValidator.class}):表示通过ListConstraintValidator这个类中定义的校验规则来进行校验。
2、 String message() default “{com.huang.gulimall.common.valid.ListValue.message}”;:表是如果校验不通过,会获取ValidationMessages.properties文件中的com.huang.gulimall.common.valid.ListValue.message的值。注意:303校验不通过时的默认提示消息都保存在ValidationMessages.properties文件中,因此我们自定义时也应该创建该名字的文件名,不然读取不到默认消息。

二、创建ListConstraintValidator.class类来定义校验规则。

public class ListConstraintValidator implements ConstraintValidator<ListValue, Byte> {

    Set set = new HashSet<>();

    @Override
    public void initialize(ListValue constraintAnnotation) {
        int[] value = constraintAnnotation.value();
        for (int i : value) {
            set.add(i);
        }
    }

    @Override
    public boolean isValid(Byte value, ConstraintValidatorContext context) {
        return set.contains(value)? true:false;
    }
}

说明:
1、该类必须实现ConstraintValidator接口。原因是—点进@Constraint(validatedBy = {})里的validatedBy属性可以看到,是类的数组,且这些类应该实现ConstraintValidator接口。
2、ConstraintValidator<ListValue, Byte>中第一个范型参数是自定义的注解名,第二个范型参数是被校验字段的类型。这里可以点进该接口查看该两个范型参数的说明。
3、isValid()方法的第一个参数为被校验字段的值。在该方法内定义校验规则

三、创建ValidationMessages.properties文件来确定默认校验不通过时显示的消息,即在该文件内定义"{com.huang.gulimall.common.valid.ListValue.message}"的值。

特别注意:文件名必须为该名字,不能改动,因为注解中message属性的默认值就是从该文件中获取的

新建好后,ValidationMessages.properties文件中的内容如下:

com.huang.gulimall.common.valid.ListValue.message = 必须提交指定的值
  • 9
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值