Spring 如何访问JSR-303消息中的字段值?

Spring 如何访问JSR-303消息中的字段值?,spring,field,bean-validation,substitution,Spring,Field,Bean Validation,Substitution,我想通过以下方式自定义我的错误消息: 假设一类人的以下声明: @Size(min=10, max=200, message="{name.size}") private String name; 在ValidationMessages.properties中声明的错误消息中,我还想输出字段值,即,我想执行以下操作: name.size=The name '{name}' is invalid, its size must be between {min} and {max} 假设“名称”

我想通过以下方式自定义我的错误消息:

假设一类人的以下声明:

@Size(min=10, max=200, message="{name.size}")  
private String name;
在ValidationMessages.properties中声明的错误消息中,我还想输出字段值,即,我想执行以下操作:

name.size=The name '{name}' is invalid, its size must be between {min} and {max}
假设“名称”字段的内容为“abc”。然后,错误消息应如下所示:

name.size=The name '${validatedValue}' is invalid, its size must be between {min} and {max}
名称“abc”无效,其大小必须介于10和200之间


对最小值和最大值的替换是有效的,但如何对字段值执行此操作?

对于BeanValidation 1.0,我认为有一种方法可以使用消息插值器获取值。我相信在BeanValidation1.0的hibernate实现中,这是他们捆绑包的一部分

通过BeanValidation 1.1,可通过EL表达式获得此功能。现在可以通过名称validatedValue访问字段值。如果您可以尝试使用最新版本。您的消息如下所示:

name.size=The name '${validatedValue}' is invalid, its size must be between {min} and {max}

使用BeanValidation 1.0,我认为有一种方法可以使用消息插值器获取值。我相信在BeanValidation1.0的hibernate实现中,这是他们捆绑包的一部分

通过BeanValidation 1.1,可通过EL表达式获得此功能。现在可以通过名称validatedValue访问字段值。如果您可以尝试使用最新版本。您的消息如下所示:

name.size=The name '${validatedValue}' is invalid, its size must be between {min} and {max}

这是一个很好的暗示。我从Spring3.x升级到了4.x。然后我添加/升级到以下工件:javax.el javax.el-api 2.2.5 org.glassfish.web javax.el 2.2.6 javax.validation-api 1.1.0.Final org.hibernate-hibernate-validator 5.1.0.FinalLet我分享与此相关的另一个问题:我正在使用spring和我的自定义验证器实现我正在使用autowire功能。在Junit案例中,我首先直接验证,然后持久化实体,实体管理器再次验证该实体。直接验证时,autowire在自定义验证器内工作,但通过实体管理器间接调用时不工作。要使其正常工作,您必须通过EntityManagerFactory的javax.persistence.validation.factory属性指定Spring的LocalValidatoryBean。我自己在这个场景中没有遇到任何问题,但我不使用Spring,我只是坚持开箱即用的原则,它对我来说在Hibernate Validator 5.0.2.Final中工作很好。我已经找了很长一段时间了,不认为这是可能的。。。在文档中很难找到。这是一个很好的提示。我从Spring3.x升级到了4.x。然后我添加/升级到以下工件:javax.el javax.el-api 2.2.5 org.glassfish.web javax.el 2.2.6 javax.validation-api 1.1.0.Final org.hibernate-hibernate-validator 5.1.0.FinalLet我分享与此相关的另一个问题:我正在使用spring和我的自定义验证器实现我正在使用autowire功能。在Junit案例中,我首先直接验证,然后持久化实体,实体管理器再次验证该实体。直接验证时,autowire在自定义验证器内工作,但通过实体管理器间接调用时不工作。要使其正常工作,您必须通过EntityManagerFactory的javax.persistence.validation.factory属性指定Spring的LocalValidatoryBean。我自己在这个场景中没有遇到任何问题,但我不使用Spring,我只是坚持开箱即用的原则,它对我来说在Hibernate Validator 5.0.2.Final中工作很好。我已经找了很长一段时间了,不认为这是可能的。。。在文档中很难找到。