如何获取Hibernate Validator的ValidationException的插值消息

时间:2011-11-17 16:03:09

标签: spring validation spring-mvc hibernate-validator

正在运行ex.getMessage()给我:

    Property 'firstname' threw exception; nested exception is javax.validation.ValidationException:
 Error validating field firstname of class com.inferoquest.entity.Employee:
 [ConstraintViolationImpl{interpolatedMessage='Name cannot be shorter than 2 characters',
 propertyPath=firstname, rootBeanClass=class com.inferoquest.entity.Employee,
 messageTemplate='Name cannot be shorter than 2 characters'}]

我想从中提取Name cannot be shorter than 2 characters。 更新:也许我还应该补充一点,我想以干净的方式做到这一点,而不是正则表达式: - )

我已经看过this主题的主题。它的答案可能包含我的解决方案,但说实话,我认为这样一个简单的任务似乎过于复杂,老实说它不能很好地理解它使用它。

有什么想法吗?

2 个答案:

答案 0 :(得分:3)

ConstraintViolationException包含一组ConstraintViolations(有关详细信息,请参阅JavaDoc)。您可以通过在捕获的异常上调用getConstraintViolations()来获取这些违规,迭代该集并构建包含所包含违规的所有消息的消息。

答案 1 :(得分:0)

仅从这一行获取消息的最简单方法是在 catch 部分中写入:

ex.getConstraintViolations().forEach(v -> System.out.println(v.getMessage()));

搜索这个解决方案大约三个小时,至少找到了这个。

当然,如果你想做更复杂的事情,你需要别的东西。但这对于开始来说已经足够了。