一、validation国际化
1.1 思路说明
在Spring Boot项目中,对于validation的国际化非常简单,只需要简单的几个步骤:
(1)校验注解message属性,使用{key}的方式进行编码,比如:{username.notBlank};
(2)创建配置文件,默认文件名称ValidationMessages;
(3)在配置文件中配置key-value。
1.2 具体的操作示例
接下来的操作基于前面的文章的例子往下编码的。
1.2.1校验注解message属性
修改UserInfo的校验注解,这里我们拿一个属性来举例说明:
@NotBlank(message = "{username.notBlank}")
privateStringusername;
说明:这里的message已经不是具体的信息了,而是配置了key的方式{username.notBlank}
1.2.2建配置文件,默认文件名称ValidationMessages
在resources的目录下,创建配置文件,默认文件名称ValidationMessages.properties:
文件名称说明:
(1)默认:ValidationMessages.properties;
(2)中文:ValidationMessages.zh_CN.properties;
(3)英文:ValidationMessages.en_US.properties;
1.2.3在配置文件中配置key-value
在配置文件中配置key-value:
username.notBlank = username is not blank!
至此编码完毕,可以启动进行测试了,如果正常的情况下,那么提示信息就会变成:
二、validation国际化进阶
2.1 乱码问题
一切看起来似乎很完美,就在我们沉静在快乐之中的时候,产品发话了,这中文呢?
O(∩_∩)O哈哈~ 高兴的太早了,
于是乎,我就吧信息修改成了中文:
username.notBlank = 用户名不能为空
一启动,乍一看还以为闹鬼了:
NND,这是一坨什么鬼东西。
这就是中文乱码了,为啥会乱码呢?可以看《SpringBoot使用@Value读取.properties中文乱码及解决方法》,这里不重复赘述。
那怎么搞呢?中文出现乱码,是因为读取properties文件的编码方式不是utf-8,那关键是怎么破呢?
2.1.1 方案一:修改IntelliJ Idea的文件配置
修改Idea的文件配置:
修改之后,重新启动程序就可以了。
2.1.2 方案二:中文转换为ASCII
可以使用一些在线工具或者使用一些插件,转换为ASCII码,转换为:
username.notBlank = \u7528\u6237\u540d\u4e0d\u80fd\u4e3a\u7a7a
重启访问就可以了。
在线转换工具:
https://www.matools.com/code-convert-ascii
2.1.3 方案三:编码设置编码为UTF-8
对于读取配置文件是ValidationMessageSource的属性,只要对这个对象进行配置即可:
@Bean
public MessageSource messageSource() {
ResourceBundleMessageSource source = new ResourceBundleMessageSource();
source.setDefaultEncoding("utf-8");//读取配置文件的编码格式
source.setCacheMillis(-1);//缓存时间,-1表示不过期
source.setBasename("ValidationMessages");//配置文件前缀名,设置为Messages,那你的配置文件必须以Messages.properties/Message_en.properties...
return source;
}
@Bean
public Validator validator() {
LocalValidatorFactoryBean factoryBean = new LocalValidatorFactoryBean();
MessageInterpolatorFactory interpolatorFactory = new MessageInterpolatorFactory();
factoryBean.setMessageInterpolator(interpolatorFactory.getObject());
factoryBean.setValidationMessageSource(messageSource());
return factoryBean;
}
这段代码放在@Configuration配置的类或者启动类都可正常执行。
。。。。。。。。。。。。。。。。。版权原因,完整文章,请参考如下:SpringBoot 使用validation数据校验之国际化问题怎么搞?满满的方案,值得收藏 - 第411篇