使用@Pattern时如何获取经过验证的输入的值?

时间:2018-10-12 12:01:03

标签: java spring spring-mvc bean-validation spring-el

我正在使用@Pattern来验证输入内容是否与IP地址匹配:

@Pattern(regexp = "^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])$",message = "Invalid IP Address! {validation.value}")

有没有办法告诉spring获得消息中的实际值?

现在我得到:

javax.validation.ConstraintViolationException: controllerMethod.ip: Invalid IP Address! {validation.value}

但是我想要

javax.validation.ConstraintViolationException: controllerMethod.ip: Invalid IP Address! BlaBlaBla 

1 个答案:

答案 0 :(得分:2)

@Pattern(regexp = "...", message = "Invalid IP Address! ${validatedValue}")

我对Spring解析默认验证消息中SpEL表达式的能力感到怀疑。

在进行调试时,我设法发现评估上下文知道许多属性,包括regexppayloadflagsgroups,{{1 }}和validatedValue(专门用于message)。

您可以通过用@Pattern括起名称来将其中的任何一个包括在@Pattern#message中。

由于Spring使用Hibernate Validator作为JSR-303 / JSR-349的默认参考实现,因此值得阅读Hibernate文档:Chapter 4. Interpolating constraint error messages