【问题标题】:Create Validator wrapper tag创建验证器包装标签
【发布时间】:2016-02-23 15:29:38
【问题描述】:

我创建了包装@Pattern 的自定义验证器标签。

这里,

@Pattern(regexp = "~")
@Target({ ElementType.METHOD, ElementType.FIELD, ElementType.PARAMETER })
@Retention(RetentionPolicy.RUNTIME)
@Constraint(validatedBy = {})
public @interface CustomConstraint {

    String message() default "";
    Class[] groups() default {};
    Class[] payload() default {};
}

但是,这个标签有不能设置“消息”属性的问题。 我如何设置“消息”的属性?

【问题讨论】:

    标签: jakarta-ee bean-validation custom-validators


    【解决方案1】:

    你要找的是@OverridesAttribute:

    @Pattern(regexp = "~")
    @Target({ ElementType.METHOD, ElementType.FIELD, ElementType.PARAMETER })
    @Retention(RetentionPolicy.RUNTIME)
    @Constraint(validatedBy = {})
    public @interface CustomConstraint {
    
        String message() default "";
        Class[] groups() default {};
        Class[] payload() default {};
    
        @OverridesAttribute(constraint = Pattern.class, name = "message")
        String patternMessage() default "";
    }
    

    【讨论】:

    • 谢谢,哈代。我通过@ReportAsSingleViolation 确认了同样的事情。 @OverridesAttribute 和 @ReportAsSingleViolation 有什么区别?
    • @ReportAsSingleViolation 将只报告单个约束违规,即组合约束类的一个形式,即使有多个违规。如果没有 @ReportAsSingleViolation,您会为组合约束的每个失败约束收到一条消息。在后一种情况下,您可以使用 @OverridesAttribute 覆盖组成约束的消息键(如您的情况下的 Pattern)。
    • 我尝试使用@overridesattribute
    猜你喜欢
    • 1970-01-01
    • 2010-10-19
    • 1970-01-01
    • 1970-01-01
    • 2019-07-20
    • 2011-11-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多