【问题标题】:Making javax validation error message more specific使 javax 验证错误消息更具体
【发布时间】:2011-07-10 18:04:33
【问题描述】:

很抱歉,如果这个问题以前在某个地方已经讨论过。如果有请给我链接,我还没有找到满意的答案。

我一直在寻找一种方法,让我的 javax 验证提供的错误消息更具体。

我当前的 @Min 注释消息在 ValidationMessages.properties 文件中指定:

javax.validation.constraints.Min.message=The value of this variable must be less than {value}.

这会按预期打印出来

The value of this variable must be less than 1

我想要的是消息还包括验证失败的变量(和类)的名称以及失败的变量的值。所以更像。

The value of class.variable was 0 but not must be less than 1

任何帮助将不胜感激。

克莱

【问题讨论】:

    标签: java bean-validation min


    【解决方案1】:

    嗯。恼人的!在我看来,您有 3 个选项:

    1. 您可以编写自定义 MessageInterpolator 并将其替换为您的验证配置,但这似乎真的很脆弱。

    2. 您可以以@Min (see how to do a custom validator here) 的样式声明自己的自定义注解...

    3. .. 但是您需要的信息实际上保存在来自 Validator 实例的 ConstraintViolation 对象中。只是它没有放入默认消息中。

    我猜您目前正在使用某种网络框架来验证表单。如果是这种情况,覆盖验证并执行类似操作应该非常简单(快速hacky版本,您应该能够通过使用外部属性文件使其非常整洁):

    Set> 违规 = validator.validate(form); for (ConstraintViolation cv : 违规) { 类> annoClass = cv.getConstraintDescriptor().getAnnotation().getClass(); if (Min.class.isAssignableFrom(annoClass)) { 字符串 errMsg = MessageFormat.format( "{0}.{1} 的值为:{2} 但不得小于 {3}", cv.getRootBeanClass(), cv.getPropertyPath().toString(), cv.getInvalidValue(), cv.getConstraintDescriptor().getAttributes().get("值")); // 将 errMsg 作为错误返回到表单中 } }

    【讨论】:

      【解决方案2】:

      我认为您需要创建自定义约束。
      您没有提到您正在使用哪种规范实现,但是有很好的文档说明如何为 Hibernate Validator here 创建自定义约束。

      部分过程将涉及创建您自己的 ValidationMessages.properties 文件

      【讨论】:

        猜你喜欢
        • 2011-07-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-05-07
        • 2017-03-22
        • 2018-12-10
        相关资源
        最近更新 更多