当前位置: 首页 > 面试题库 >

使javax验证错误消息更具体

安建木
2023-03-14
问题内容

抱歉,这个问题以前是否已经解决过。如果可以,请将我链接到该文件,但到目前为止,我还没有找到满意的答案。

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

在ValidationMessages.properties文件中指定了我目前用于@Min批注的消息:

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

任何帮助将不胜感激。

克莱


问题答案:

嗯 烦人!在我看来,您有3种选择:

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

  2. 您可以使用@Min样式声明自己的自定义注释(在此处查看如何执行自定义验证器)…

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

我猜您当前正在使用某种Web框架来验证表单。在这种情况下,重写验证并执行类似的操作应该非常简单(快速的hacky版本,您应该能够通过使用外部属性文件使它非常整洁):

  Set <ConstraintViolation <MyForm >>违规= validator.validate(form);
  对于(ConstraintViolation <MyForm> cv:违反){
    Class <?> annoClass = cv.getConstraintDescriptor()。getAnnotation()。getClass();
    如果(Min.class.isAssignableFrom(annoClass)){
      字符串errMsg = MessageFormat.format(
        “ {0}。{1}的值是:{2},但不能小于{3}”,
        cv.getRootBeanClass(),
        cv.getPropertyPath()。toString(), 
        cv.getInvalidValue(),
        cv.getConstraintDescriptor()。getAttributes()。get(“ value”)));
            //将errMsg放回表单作为错误 
    }
  }


 类似资料:
  • 我有一个具有类型为的字段的实体,在该字段上我定义了一个注释,强制执行与给定正则表达式匹配的字段内容。现在我想知道,是否可以参数化约束,例如在定义的验证错误消息中显示与正则表达式不匹配的第一个字符。 更糟糕的是,要显示的约束违反错误消息不是直接在注释中定义的,而是在属性文件中定义的,如下面所示的示例: 示例类: 示例属性文件: 有可能用javax做这样的事情吗。验证?我假设注释无法参数化错误消息。但

  • 我有一个简单的登录模型类,几乎没有数据注释验证 View是一个部分View,如下所示: 我相信我已经做了验证消息显示所需的所有事情,但它没有,客户端验证也没有。在母版页的头部区域,我还包括了以下脚本 是什么导致了这个问题?解决办法是什么?

  • 对于错误的响应,是否可能在响应中返回验证注释消息?我认为这是可能的,但我注意到我们的项目没有给出详细的不良请求信息。 如果请求缺少IDField,我希望返回“IDField is required”。我用的是泽西2.0。我看到的回应是...

  • 我为Money类编写了一个自定义Hibernate验证约束: 它工作正常,除了错误信息。我看到了非常奇怪的行为:找到了资源包,消息按名称解析,但它被包裹在特殊的字符中,如果消息不能按名称解析,通常会出现这些字符: 此处

  • 问题内容: 我正在使用validation- api来验证输入字段是否不包含非法字符:<>’“等。我正在使用@Pattern批注,并将自定义消息翻译为如下所示:以下符号<>”’„是不允许。打印此消息时,单引号字符丢失。我有:不允许以下标志<>“„。 我尝试在message.properties中使用'和\ u0027和’,但是没有成功(在第三种情况下,消息中有片段’)。使用以下方式显示消息: Th

  • 因此,很明显,它识别出输入的名称太短,但我在视图中没有得到任何错误消息,正如这里所预期的:。