SpringBoot 使用validation数据校验之国际化问题怎么搞?满满的方案,值得收藏 - 第411篇

一、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:

SpringBoot 使用validation数据校验之国际化问题怎么搞?满满的方案,值得收藏 - 第411篇_第1张图片

文件名称说明:

(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的文件配置:

SpringBoot 使用validation数据校验之国际化问题怎么搞?满满的方案,值得收藏 - 第411篇_第2张图片

       修改之后,重新启动程序就可以了。

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的属性,只要对这个对象进行配置即可:

@Beanpublic 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;}@Beanpublic Validator validator() {    LocalValidatorFactoryBean factoryBean = new LocalValidatorFactoryBean();    MessageInterpolatorFactory interpolatorFactory = new MessageInterpolatorFactory();    factoryBean.setMessageInterpolator(interpolatorFactory.getObject());    factoryBean.setValidationMessageSource(messageSource());    return factoryBean;}

       这段代码放在@Configuration配置的类或者启动类都可正常执行。

。。。。。。。。。。。。。。。。。版权原因,完整文章,请参考如下:SpringBoot 使用validation数据校验之国际化问题怎么搞?满满的方案,值得收藏 - 第411篇
 

你可能感兴趣的:(框架,spring,boot,java,spring)