java - 将默认 hibernate 消息委托(delegate)给约束组合中的验证失败

标签 java bean-validation hibernate-validator

我正在开发一个应用程序,在该应用程序中使用约束组合将具有很大的值(value)。

例如,代替:

@Size(min=1, max=60)
@Pattern(regexp = "[a-zA-Z0-9]*")
protected String invoiceNumber;

我可以这样写:

@ValidInvoiceNumber
protected String invoiceNumber;

带有以下注释:

@Size(min=1, max=60)
@Pattern(regexp = "[a-zA-Z0-9]*")
@ReportAsSingleViolation
@Target({ METHOD, FIELD, ANNOTATION_TYPE })
@Retention(RUNTIME)
@Constraint(validatedBy = {})
@Documented
public @interface ValidInvoiceNumber {
    String message() default "{someMessageCode}";
    Class<?>[] groups() default {};
    Class<? extends Payload>[] payload() default {};
}

我面临的问题是,我希望从验证返回的约束违反消息不是一些通用的 @ValidInvoiceNumber 消息(如上面的 someMessageCode),而是失败的实际注释的消息.因此,例如,如果大小检查失败,我将返回一条大小错误默认消息。如果模式消息失败,我将收到模式错误默认消息。

目前我只是收到一般的@ValidInvoiceNumber 消息,它没有向用户提供足够的信息。

感谢您的帮助。

最佳答案

只需删除@ReportAsSingleViolation。这将为您提供每个失败约束的 ConstraintViolation。事实上,这也确保所有约束都得到验证。使用 @ReportAsSingleViolation 时,验证会在第一个验证错误时停止,并从您的案例中的主注释 (ValidInvoiceNumber) 返回消息。另请参阅相关的 Bean 验证规范部分 - http://beanvalidation.org/1.1/spec/#constraintsdefinitionimplementation-constraintcomposition

关于java - 将默认 hibernate 消息委托(delegate)给约束组合中的验证失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22566596/

相关文章:

java - Apache Mahout——我应该用它来构建自定义推荐系统吗?

java - 打开铃声设置屏幕

java - OSGi 类似于其他编程语言中的模块化

基于变量的javax Bean验证?

operator-precedence - 控制验证注释顺序?

JAVA java.lang.reflect.Constructor 无法调用 Date 构造函数

spring - 在事务服务调用中执行 JSR 303 验证

java-ee-6 - 为@Size提供自定义验证器

java - JSR-303 如何以不同方式验证两个子对象

私有(private)方法上的 Javax 验证不会被触发