gpt4 book ai didi

java - 使 javax 验证错误消息更具体

转载 作者:搜寻专家 更新时间:2023-10-30 21:26:06 25 4
gpt4 key购买 nike

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

我一直在四处寻找,试图找到一种方法让我的 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

如有任何帮助,我们将不胜感激。

克利

最佳答案

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

  1. 你可以写一个自定义 MessageInterpolator并将其替换为您的验证配置,但这看起来真的很脆弱。

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

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

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

  Set<ConstraintViolation<MyForm>> violations = validator.validate(form);  for (ConstraintViolation<MyForm> cv : violations) {    Class<?> annoClass = cv.getConstraintDescriptor().getAnnotation().getClass();    if (Min.class.isAssignableFrom(annoClass)) {      String errMsg = MessageFormat.format(        "The value of {0}.{1} was: {2} but must not be less than {3}",        cv.getRootBeanClass(),        cv.getPropertyPath().toString(),         cv.getInvalidValue(),        cv.getConstraintDescriptor().getAttributes().get("value"));            // Put errMsg back into the form as an error     }  }

关于java - 使 javax 验证错误消息更具体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5226797/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com