【问题标题】:How to get the value of the validated input when using @Pattern?使用@Pattern 时如何获取已验证输入的值?
【发布时间】:2018-10-12 12:01:02
【问题描述】:

我正在使用@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 

【问题讨论】:

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


    【解决方案1】:
    @Pattern(regexp = "...", message = "Invalid IP Address! ${validatedValue}")
    

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

    在调试时,我设法发现评估上下文知道很多属性,包括 regexppayloadflagsgroupsvalidatedValuemessage(专门针对@Pattern)。

    您可以通过在名称周围加上${...} 来将其中的任何一个添加到@Pattern#message

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

    【讨论】:

      猜你喜欢
      • 2020-11-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多