Use custom validation messages in Hibernate + Spring
Got it! :-)
I added the following bean instead the above mentioned two into my dispatcher-servlet.xml
:
<bean id="messageSource" class="org.springframework.context.support.ReloadableResourceBundleMessageSource">
<property name="basename" value="/WEB-INF/validationMessages" />
</bean>
Then, in my validationMessages.properties I used the following syntax:
NotEmpty.location.title=My custom Message
I guess this is the reason: I used the Hibernate validation annotations (not the javax ones)
And for general the syntax of the messages file should look like
[ConstraintName].[ClassName].[FieldName]=[Message]
Hope this helps some other people out there ;-)
And to access the message from a spring controller just add @Autowired private MessageSource messageSource;
as a class field and use the messageSource.getMessage
methods. Because I'm just using one locale I used messageSource.getMessage( "NotEmpty.location.title", null, null )
dtrunk
Updated on May 28, 2020Comments
-
dtrunk almost 4 years
I tried the steps from the answer here: Hibernate Validator, custom ResourceBundleLocator and Spring
But still just getting
{location.title.notEmpty}
as output instead of the message.dispatcher-servlet.xml
<bean name="validator" class="org.springframework.validation.beanvalidation.LocalValidatorFactoryBean"> <property name="validationMessageSource"> <ref bean="resourceBundleLocator"/> </property> </bean> <bean name="resourceBundleLocator" class="org.springframework.context.support.ReloadableResourceBundleMessageSource"> <property name="basenames"> <list> <value>/WEB-INF/validationMessages</value> </list> </property> </bean>
/WEB-INF/validationMessages.properties:
location.title.notEmpty=My custom message
Form (Class Location)
@NotEmpty( message = "{location.title.notEmpty}" ) private String title;
What's going wrong here?
-
darek over 12 yearsNice, but it works also for Hibernate validation annotations :)
-
dtrunk over 12 yearsYes, my first thought was it works only for hibernate validation annotations but it works for both - hibernate and javax.
-
anre almost 8 yearsIt's not necessary to adjust the syntax when specifying the validator in <mvc:annotation-driven validator="validator" />, see stackoverflow.com/a/21508937/1672678 and stackoverflow.com/a/22655303/1672678.
-
Admin almost 8 yearsIf you are using Spring Boot, you can take advantage of autoconfiguration by adding the following key to application.properties: spring.messages.basename=your/basename/messages