对不起,如果此问题已在某处提及过。如果有请链接我,我还没有找到一个满意的答案。
我一直在寻找一种方法来让我的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个选择:
你可以写一个自定义 MessageInterpolator 并将其替换为验证配置,但这似乎非常脆弱。
您可以在@Min的样式中声明自己的自定义注释(看看如何在这里做一个自定义验证器)...
..但您需要的信息实际上是在Validator实例中出现的ConstraintViolation对象中。只是它没有被置于默认消息中。
我猜你现在正在使用某种Web框架来验证表单。如果是这种情况,那么覆盖验证并执行类似的操作应该非常简单(快速的hacky版本,您应该能够通过使用外部属性文件使其非常整洁):
设置<ConstraintViolation <MyForm >> violation = validator.validate(form);
for(ConstraintViolation <MyForm> cv:violation){
Class <?> annoClass = cv.getConstraintDescriptor()。getAnnotation()。getClass();
if(Min.class.isAssignableFrom(annoClass)){
String errMsg = MessageFormat.format(
“{0}。{1}的值为:{2}但不得小于{3}”,
cv.getRootBeanClass()
cv.getPropertyPath()。的toString(),
cv.getInvalidValue()
。cv.getConstraintDescriptor()的getAttributes()获得( “值”));
//将errMsg作为错误放回到表单中
}
}
我相信你需要创建一个自定义约束。
您还没有提到您正在使用的规范的哪个实现,但是有关于如何为Hibernate Validator创建自定义约束的良好文档 这里。
部分过程将涉及创建自己的ValidationMessages.properties文件