美文网首页
validator 相关注解整理

validator 相关注解整理

作者: a丶逍遥子 | 来源:发表于2019-06-21 08:26 被阅读0次

    嵌套注解 @Valid(javax.validation.Valid)

    空和非空检查: @Null、@NotNull、@NotBlank、@NotEmpty

    注解 支持Java类型 备注
    @Null Object 验证元素值为null
    @NotNull Object 验证元素值不能为 null
    @NotBlank CharSequence 验证元素值不为null且移除两边空格后长度大于0
    @NotEmpty CharSequence,Collection,Map and Arrays 验证元素值不为null且不为空(字符串长度不为0、集合大小不为0)

    Boolean值检查: @AssertTrue、@AssertFalse

    注解 支持Java类型 备注
    @AssertTrue Boolean, boolean 验证元素值必须为true,否则抛异常
    @AssertFalse Boolean, boolean 验证元素值必须为flase

    长度检查: @Size、@Length

    注解 支持Java类型 备注
    @Size String,Collection,Map,arrays,CharSequence 验证元素个数包含在一个区间
    @Length CharSequence 验证元素值包含在一个区间

    日期检查: @Future、@FutureOrPresent、@Past、@PastOrPresent

    注解 支持Java类型 备注
    @Future java.util.Date, java.util.Calendar 验证日期为当前时间之后
    @FutureOrPresent java.util.Date, java.util.Calendar 验证日期为当前时间或之后一个时间
    @Past java.util.Date, java.util.Calendar 验证日期为当前时间之前
    @PastOrPresent java.util.Date, java.util.Calendar 验证日期为当前时间或之前

    其它检查: @Email、@CreditCardNumber、@URL、@Pattern、@ScriptAssert、@UniqueElements

    注解 支持Java类型 备注
    @Email CharSequence 验证日期为当前时间之后
    @CreditCardNumber CharSequence 验证日期为当前时间或之后一个时间
    @URL CharSequence 验证日期为当前时间之前
    @Pattern CharSequence 验证日期为当前时间或之前
    @Valid Object 验证关联对象元素进行递归校验检查
    @UniqueElements Collection 校验集合中的元素必须保持唯一 否则异常

    数值检查: @Min、@Max、@Range、@DecimalMin、@DecimalMax、@Digits

    注解 支持Java类型 备注
    @Min BigDecimal, BigInteger, byte, short,int, long,Number. 检验当前数值大于等于指定值
    @Max CharSequence 检验当前数值小于等于指定值
    @Range CharSequence 验证数值为指定值区间范围内
    @DecimalMin CharSequence 验证数值是否大于等于指定值
    @DecimalMax Object 验证数值是否小于等于指定值
    @Digits(integer = 3, fraction = 2) 验证注解的元素值的整数位数和小数位数上限

    SpringBoot自定义配置

    只是为了开启快速失败

       @Bean
        public LocalValidatorFactoryBean localValidatorFactoryBean(Environment environment) {
            LocalValidatorFactoryBean factoryBean = new LocalValidatorFactoryBean();
            MessageInterpolatorFactory interpolatorFactory = new MessageInterpolatorFactory();
            factoryBean.setMessageInterpolator(interpolatorFactory.getObject());
            String[] activeProfiles = environment.getActiveProfiles();
            for (String activeProfile : activeProfiles) {
                if ("PRO" .equalsIgnoreCase(activeProfile)) {
                    factoryBean.setValidationPropertyMap(Collections
                        .singletonMap(HibernateValidatorConfiguration.FAIL_FAST, Boolean.TRUE.toString()));
                    break;
                }
            }
            return factoryBean;
        }
    

    自定义的校验状态(重复注解1.8以下不支持)

    import javax.validation.Constraint;
    import javax.validation.ConstraintValidator;
    import javax.validation.ConstraintValidatorContext;
    import javax.validation.Payload;
    import java.lang.annotation.Documented;
    import java.lang.annotation.ElementType;
    import java.lang.annotation.Repeatable;
    import java.lang.annotation.Retention;
    import java.lang.annotation.RetentionPolicy;
    import java.lang.annotation.Target;
    import java.util.Objects;
    
    /**
     * 校验状态
     *
     * @author kong
     */
    @Repeatable(IsValidState.IsValidStates.class)
    @Target({ElementType.FIELD})
    @Retention(RetentionPolicy.RUNTIME)
    @Constraint(validatedBy = IsValidState.ValidStateValidator.class)
    public @interface IsValidState {
    
        String message() default "无效状态";
    
        Class<?>[] groups() default {};
    
        Class<? extends Payload>[] payload() default {};
    
        int[] states();
    
        class ValidStateValidator implements ConstraintValidator<IsValidState, Number> {
    
            private IsValidState validState;
    
            @Override
            public void initialize(IsValidState validState) {
                this.validState = validState;
            }
    
            @Override
            public boolean isValid(Number value, ConstraintValidatorContext context) {
                if (Objects.isNull(value)) {
                    return true;
                }
                int[] states = validState.states();
                for (int state : states) {
                    if (Numbers.equalsIgnoreType(state, value)) {
                        return true;
                    }
                }
                return false;
            }
        }
    
        @Documented
        @Target({ElementType.FIELD})
        @Retention(RetentionPolicy.RUNTIME)
        @interface IsValidStates {
            IsValidState[] value();
        }
    
    }
    

    相关文章

      网友评论

          本文标题:validator 相关注解整理

          本文链接:https://www.haomeiwen.com/subject/khdeqctx.html