您好,欢迎访问一九零五行业门户网

SpringBoot Validation提示信息国际化如何配置

spring boot validation支持jsr-380(aka. bean validation 2.0,part of jakarta ee and javase)注解,可通过验证注解的message属性设置验证错误提示信息,且每个验证注解都有默认的message配置,例如@notblank的message属性值设置如下图:
默认的message = {...}的形式即指定国际化属性的名称,后续会根据语言环境替换为对应的值,而这些国际化属性的定义可参见hibernate-validator中的org.hibernate.validator.validationmessages.properties等一些列国际化属性定义:
而我们在实际使用过程中,除了可以设置message={propname}的形式来读取国际化属性,亦可以直接设置值message=具体的提示信息,而不明确设置message则使用之前提到的org.hibernate.validator.validationmessages.properties中的默认配置。
spring boot validation起初其并不直接支持读取spring boot自身的国际化配置(通过spring.messages进行配置),而是需要在resources/validationmessages.properties中进行配置的国际化属性才会生效,而后续在spring boot 2.6+版本才支持validation与spring boot自身的国际化配置相结合。
接下来结合spring boot 2.5和2.6版本分别介绍下spring boot validation如何集成自定义国际化验证提示信息。
spring boot 2.5.x在spring boot 2.5.x版本中,spring boot validation默认只支持读取resources/validationmessages.properties系列文件的中的国际化属性,且中文需要进行ascii转码才可正确显示
如下图:
而就算spring boot应用亦声明了自身的国际化配置,但是spring boot validation框架是读取不到的
例如:
spring boot应用自身的国际化配置如下图,但是在验证注解message属性设置i18n/messages.properties中的{propname}是读取不到的:
而想要spring boot validation框架和spring boot自身使用同样的国际化配置,则可通过如下方式进行配置:
import org.springframework.context.messagesource;import org.springframework.context.annotation.bean;import org.springframework.context.annotation.configuration;import org.springframework.validation.validator;import org.springframework.validation.beanvalidation.localvalidatorfactorybean;import org.springframework.web.servlet.config.annotation.webmvcconfigurer;/** * spring web验证器自定义国际化文件配置<br/> * 注:适用于spring boot 2.5.* * * @author luohq * @date 2022-05-21 */@configurationpublic class webvalidationconfig implements webmvcconfigurer { /** * 国际化消息源 */ private messagesource messagesource; public webvalidationconfig(messagesource messagesource) { //注入spring boot国际化消息源(需通过spring.messages明确指定) this.messagesource = messagesource; } /** * 使用自定义localvalidatorfactorybean, * 设置spring国际化消息源 */ @bean @override public validator getvalidator() { localvalidatorfactorybean bean = new localvalidatorfactorybean(); //仅兼容spring boot spring.messages设置的国际化文件和原hibernate-validator的国际化文件 //不支持resource/validationmessages.properties系列 bean.setvalidationmessagesource(this.messagesource); return bean; }}
注:
通过上述配置类进行配置后,
仅兼容spring boot spring.messages设置的国际化文件和原hibernate-validator的国际化文件
不再支持resource/validationmessages.properties系列
spring boot 2.6.x翻了github上spring boot框架的release说明,发现其在2021-08-20发布的v2.6.0-m2中提到了支持使用自身国际化messagesource解析验证提示信息,也就是说spring boot 2.6.x版本之后已支持验证注解message属性引用spring boot自身国际化配置。
实际测试spring boot 2.6.x版本,验证注解message={propname}:
可以直接读取通过spring.messages设置的国际化配置中的属性(设置utf-8编码后中文可无需ascii转码),
同时亦支持读取resources/validationmessages.properties中的配置(中文需ascii转码),
且依旧支持原hibernate-validator的国际化文件。
且读取优先级依次从上到下,即最上面的优先生效。
具体的配置及使用方式见下图:
spring boot 2.6关于spring boot validation与messagesource的融合,具体实现细节可参见release中提到的github pull request #17530:
以上就是springboot validation提示信息国际化如何配置的详细内容。
其它类似信息

推荐信息