【发布时间】:2023-04-03 16:08:01
【问题描述】:
我编写了一个由自定义ConstraintValidator 实现的验证注释。我还想生成非常具体的 ConstraintViolation 对象,这些对象使用在消息插值期间的验证过程中计算的值。
public class CustomValidator
implements ConstraintValidator<CustomAnnotation, ValidatedType> {
...
@Override
public boolean isValid(ValidatedType value, ConstraintValidatorContext context) {
// Figure out that the value is not valid.
// Now, I want to add a violation whose error message requires arguments.
}
}
我的消息源中的假设错误消息:
CustomAnnotation.notValid = The supplied value {value} was not valid because {reason}.
传递给isValid 方法的上下文提供了一个接口,用于构建约束冲突,并最终将其添加到上下文中。但是,我似乎无法弄清楚如何使用它。根据我正在使用的版本的documention,我可以将 bean 和属性节点添加到违规中。这些是我可以为违规定义指定的唯一其他详细信息,但我不明白它们如何映射到错误消息中的参数。
百万美元问题:如何使用自定义验证器将动态参数传递给我的验证错误消息?我想使用 ConstraintValidatorContext 填写 {value} 和 {reason} 字段的建筑违规界面。
获取消息源的实例并在自定义验证器中插入消息不是一种选择 - 来自验证的消息无论如何都会被插入,并且内部插入将导致某些消息被插入两次,可能会消灭转义我的消息定义文件中的单引号或其他具有特殊含义的字符。
【问题讨论】:
标签: hibernate validation bean-validation