在将hibernate验证器与自定义消息源一起使用时如何转义参数

问题描述 投票:1回答:1

我有类似的东西:

<bean id="messageSource" class="org.springframework.context.support.ReloadableResourceBundleMessageSource">
    <property name="basenames">
        <list>
            <value>...</value>
        </list>
    </property>
    <property name="defaultEncoding" value="UTF-8"/>
    <property name="fallbackToSystemLocale" value="false"/>
    <property name="useCodeAsDefaultMessage" value="true"/>
</bean>

<bean id="validator" class="org.springframework.validation.beanvalidation.LocalValidatorFactoryBean">
    <property name="validationMessageSource" ref="messageSource"/>
</bean>

还有一些使用此消息的自定义验证器(具有values属性):

validation.constraints.PossibleValues.message=The provided value "${validatedValue}" is invalid. Possible values: {values}

问题是{}AbstractMessageInterpolator#interpolateMessage不再存在,所以我没有得到参数插值。

我试过像'{'validatedValue'}'\\{这样的各种逃脱没有成功。

在这种情况下,有人知道如何转义消息参数吗?

(我看到this question,但它没有帮助)

java spring-mvc hibernate-validator
1个回答
1
投票

我使用的是几乎相同的配置:

  <bean id="messageSource" class="org.springframework.context.support.ReloadableResourceBundleMessageSource">
    <property name="defaultEncoding" value="ISO-8859-1" />
    <property name="fallbackToSystemLocale" value="false" />
    <property name="useCodeAsDefaultMessage" value="false" />
    <property name="basenames" value="classpath:applicationMessages,classpath:ValidationMessages"/>
  </bean>

在我的ValidationMessages.properties中,我使用简单的{和}覆盖了一些加利西亚语言的消息,用于插值变量。例如:

javax.validation.constraints.Min.message=debe ser maior o igual a {value}
...
org.hibernate.validator.constraints.Length.message=debe ter unha lonxitude entre {min} e {max}

唯一奇怪的行为是,如果你想要单引号,你需要用一个引号来逃避它:

org.hibernate.validator.constraints.ScriptAssert.message=o script ''{script}'' non devolve true

希望这可以帮助。

© www.soinside.com 2019 - 2024. All rights reserved.