Java Spring Hibernate自定义验证程序属性文件中的默认消息
我有这个定制的spring hibernate验证器和一个测试过的message.properties文件(它可以工作),但我无法正确设置这部分代码:{EmailExists.user.default}。。。我的意思是,它无法获取属性文件上的EmailExists.user.default=blavarJava Spring Hibernate自定义验证程序属性文件中的默认消息,java,spring,hibernate,spring-mvc,Java,Spring,Hibernate,Spring Mvc,我有这个定制的spring hibernate验证器和一个测试过的message.properties文件(它可以工作),但我无法正确设置这部分代码:{EmailExists.user.default}。。。我的意思是,它无法获取属性文件上的EmailExists.user.default=blavar package org.andreadorigo.webapp.validators.costraints; import java.lang.annotation.Documented; i
package org.andreadorigo.webapp.validators.costraints;
import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
import javax.validation.Constraint;
import javax.validation.Payload;
import org.andreadorigo.webapp.validators.EmailExistsValidator;
@Documented
@Constraint(validatedBy = EmailExistsValidator.class)
@Target( { ElementType.METHOD, ElementType.FIELD })
@Retention(RetentionPolicy.RUNTIME)
public @interface EmailExists {
String message() default "EmailExists.user.default";
Class<?>[] groups() default {};
Class<? extends Payload>[] payload() default {};
}
hibernateContext.xml
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.1.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx-3.1.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc-3.1.xsd">
<mvc:annotation-driven validator="validator" />
<mvc:resources mapping="/resources/**" location="/WEB-INF/resources/" />
<bean id="messageSource" class="org.springframework.context.support.ReloadableResourceBundleMessageSource">
<property name="basenames">
<list>
<value>classpath:properties/messages</value>
<value>classpath:properties/errors</value>
</list>
</property>
</bean>
<bean id="localeChangeInterceptor"
class="org.springframework.web.servlet.i18n.LocaleChangeInterceptor">
<property name="paramName" value="lang" />
</bean>
<bean id="localeResolver"
class="org.springframework.web.servlet.i18n.CookieLocaleResolver">
<property name="defaultLocale" value="it" />
</bean>
<bean id="handlerMapping"
class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping">
<property name="interceptors">
<ref bean="localeChangeInterceptor" />
</property>
</bean>
<mvc:interceptors>
<bean class="org.springframework.web.servlet.i18n.LocaleChangeInterceptor">
<property name="paramName" value="lang"></property>
</bean>
</mvc:interceptors>
<bean id="propertyConfigurer"
class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="locations">
<list>
<value>classpath:properties/database.properties</value>
</list>
</property>
</bean>
<bean id="dataSource"
class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName" value="${jdbc.driver}" />
<property name="url" value="${jdbc.url}" />
<property name="username" value="${jdbc.user}" />
<property name="password" value="${jdbc.password}" />
</bean>
<bean id="validator"
class="org.springframework.validation.beanvalidation.LocalValidatorFactoryBean">
<property name="messageInterpolator" ref="messageInterpolator"></property>
</bean>
<bean name="messageInterpolator"
class="org.hibernate.validator.messageinterpolation.ResourceBundleMessageInterpolator">
<constructor-arg ref="resourceBundleLocator" />
</bean>
<bean id="resourceBundleLocator"
class="org.springframework.validation.beanvalidation.MessageSourceResourceBundleLocator">
<constructor-arg ref="messageSource"></constructor-arg>
</bean>
<bean id="sessionFactory"
class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
<property name="dataSource" ref="dataSource" />
<property name="packagesToScan" value="org.andreadorigo.webapp.entities" />
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop>
<prop key="hibernate.show_sql">true</prop>
</props>
</property>
</bean>
<tx:annotation-driven transaction-manager="transactionManager" />
<bean id="transactionManager"
class="org.springframework.orm.hibernate4.HibernateTransactionManager">
<property name="sessionFactory" ref="sessionFactory" />
</bean>
</beans>
类路径:属性/消息
类路径:属性/错误
classpath:properties/database.properties
org.hibernate.dialogue.mysqldialogue
真的
如果违反约束,则返回用于创建错误消息的默认键的属性message
应定义为:
String message() default "{EmailExists.user.default}";
以及消息\u it.properties
文件中的相应条目:
EmailExists.user.default=Il valore inserito è già presente nel database
您需要注册用于验证@Controller方法的验证器:
<bean id="validator"
class="org.springframework.validation.beanvalidation.LocalValidatorFactoryBean">
<property name="messageInterpolator" ref="messageInterpolator"></property>
</bean>
<bean name="messageInterpolator"
class="org.hibernate.validator.messageinterpolation.ResourceBundleMessageInterpolator">
<constructor-arg ref="resourceBundleLocator" />
</bean>
<bean id="resourceBundleLocator"
class="org.springframework.validation.beanvalidation.MessageSourceResourceBundleLocator">
<constructor-arg ref="messageSource"></constructor-arg>
</bean>
<mvc:annotation-driven validator="validator" />
我想你也可以用这个:
<bean class="org.springframework.context.support.ResourceBundleMessageSource" id="messageSource">
<property name="basename" value="/messages/validation"/>
</bean>
您需要确保类路径中存在文件/messages/validation.properties
。如果您使用的是Maven,则可以通过将此文件放入resources
文件夹(project/src/resources/messages/validation.properties
)来实现
考虑到@Valid messages默认只支持win-cp1251(ANSI)编码。你能发布属性文件吗?你得到的实际错误消息是什么?我用属性内容编辑了我的问题,顺便说一下,我没有从编译器那里得到任何错误。它仍然不起作用。。。可能是因为我有多语言系统和这样的消息源吗?”代码'classpath:properties/messages classpath:properties/errors'code'是否适用于其他约束..我指的是非自定义约束,例如,
@NotEmpty,@NotNull
约束?仅此:{EmailExists.user.default}
<bean class="org.springframework.context.support.ResourceBundleMessageSource" id="messageSource">
<property name="basename" value="/messages/validation"/>
</bean>