【问题标题】:Java Validation - Adding @Valid constraint to custom constraint throws "@Valid is not applicable to annotation type"Java 验证 - 将 @Valid 约束添加到自定义约束会引发“@Valid 不适用于注释类型”
【发布时间】:2014-06-01 03:38:20
【问题描述】:

我有一个使用 Java 验证注解注解的模型对象。

class Criteria{
    @NotEmpty String id;    
    @NotEmpty String name;
    String fileName;
    String hours;   
}

根据业务需求,将填充 fileName 或 hours 字段,以验证我编写了自定义验证器“CriteriaValidator”。

@Documented
@Constraint(validatedBy = {CriteriaValidator.class})
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.TYPE , ElementType.FIELD, ElementType.PARAMETER})
public @interface ValidCriteria {
    String message() default "{Criteria.Invalid}";
    Class<?>[] groups() default {};
    Class<? extends Payload>[] payload() default {};
}

上面的模型作为输入参数传入一个方法,该方法也用@Valid和@ValidCriteria注释。

public void update(@Valid @ValidCriteria Criteria criteria){...}

我遇到的问题是方法中有 2 个注释。我必须添加 @Valid 才能检查类中注释的约束。我的自定义验证器仅检查以下两个字段之一是否存在:文件名或小时。

我的问题是,我如何拥有一个注释 @ValidCriteria 来验证我的特殊要求以及对象中的 @NotEmpty 字段。

我尝试在我的自定义约束@ValidCriteria 中添加@Valid,但是我得到错误'@Valid 不适用于注释类型'

【问题讨论】:

    标签: java validation annotations bean-validation


    【解决方案1】:

    @ValidCriteria 注释应该在 Criteria 类上:

    @ValidCriteria
    class Criteria{
        @NotEmpty String id;    
        @NotEmpty String name;
        String fileName;
        String hours;   
    }
    

    【讨论】:

    • 太棒了。它工作得很好,我的方法签名现在只有 @Valid 约束。
    • 抱歉,如果我想验证我无权访问且无法使用验证注释进行注释的类?我创建了自定义注释并希望使用它来验证控制器方法参数中的外部类。
    猜你喜欢
    • 1970-01-01
    • 2019-02-11
    • 1970-01-01
    • 1970-01-01
    • 2013-07-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多