【问题标题】:JSR 303 custom constraint messageJSR 303 自定义约束消息
【发布时间】:2012-08-20 04:19:58
【问题描述】:

在 Spring MVC 应用程序上,我开发了一个自定义 JSR 303 约束,如下所示:

@Target({ElementType.FIELD, ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
@Constraint(validatedBy = {})
@Pattern(regexp = EmailWithTld.PATTERN, flags = Pattern.Flag.CASE_INSENSITIVE)
public @interface EmailWithTld {

    static final String PATTERN = "(?:[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*|\"(?:[\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x21\\x23-\\x5b\\x5d-\\x7f]|\\\\[\\x01-\\x09\\x0b\\x0c\\x0e-\\x7f])*\")@(?:(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?|\\[(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?|[a-z0-9-]*[a-z0-9]:(?:[\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x21-\\x5a\\x53-\\x7f]|\\\\[\\x01-\\x09\\x0b\\x0c\\x0e-\\x7f])+)\\])";

    String message() default "{springtest.constraints.EmailWithTld.message}";

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

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

}

问题是消息值被忽略了,验证错误时显示的消息是来自@Pattern ("must match "(?:[a-z0-9!#$%&... ..”)

我期待它从消息变量返回我的消息。

我可以获得自定义消息的一种方法是将上面的@Pattern 替换为

@Pattern(message="{springtest.constraints.EmailWithTld.message}", regexp = EmailWithTld.PATTERN, flags = Pattern.Flag.CASE_INSENSITIVE)

如果我以这种方式执行此操作,则会显示正确的消息,前提是我使用资源包进行设置。如果通过注释用法设置,则不起作用。示例:

@Pattern(message="Testing 1 2 3}"

正确的做法是什么?

【问题讨论】:

    标签: java validation spring-mvc


    【解决方案1】:

    花了整整 3 个小时后,我通过查看 Hibernate Validator 源找到了答案,它实际上非常简单......

    向类添加@ReportAsSingleViolation 注解。

    这行得通:

    @Target({ElementType.FIELD, ElementType.METHOD})
    @Retention(RetentionPolicy.RUNTIME)
    @Constraint(validatedBy = {})
    @ReportAsSingleViolation
    @Pattern(regexp = EmailWithTld.PATTERN, flags = Pattern.Flag.CASE_INSENSITIVE)
    public @interface EmailWithTld {
    
        static final String PATTERN = "(?:[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*|\"(?:[\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x21\\x23-\\x5b\\x5d-\\x7f]|\\\\[\\x01-\\x09\\x0b\\x0c\\x0e-\\x7f])*\")@(?:(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?|\\[(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?|[a-z0-9-]*[a-z0-9]:(?:[\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x21-\\x5a\\x53-\\x7f]|\\\\[\\x01-\\x09\\x0b\\x0c\\x0e-\\x7f])+)\\])";
    
        String message() default "{springtest.constraints.EmailWithTld.message}";
    
        Class<?>[] groups() default {};
    
        Class<? extends Payload>[] payload() default {};
    
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-08-09
      • 1970-01-01
      • 2013-06-13
      • 1970-01-01
      • 1970-01-01
      • 2011-11-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多