@Validated 和 @Valid校验提示信息的双语化以及动态参数添加

news/2025/2/15 8:38:55/

对于国际性应用来说,提示信息的双语化是必须的,那么@Validated 和 @Valid校验提示信息怎么来进行双语化呢,下面我们一起学习一下。

@Validated 和 @Valid校验提示信息的双语化

SpringBoot项目双语化配置

因为这里是基于SpringBoot项目学习的,所以我们首先需要配置一下SpringBoot项目的双语化,具体步骤如下:

设置配置文件

# 设置国际化消息是否总是采用格式化,默认是false
spring.messages.always-use-message-format=true
# 设置国际化属性名称,如果多个可以使用逗号分隔,默认是messages
spring.messages.basename=param-valid-messages
# 设置国际化消息缓存超时秒数,默认永远不过期,如果是0表示每次都需要重新加载
spring.messages.cache-duration=0# 国际化消息编码
spring.messages.encoding=UTF-8
# 如果没有找到特定区域设置的文件,则设置是否返回系统区域设置
spring.messages.fallback-to-system-locale=true
# 是否使用消息编码作为默认的响应消息,而非抛出NoSuchMessageException异常,只建议再开发阶段使用
spring.messages.use-code-as-default-message=false

创建国际化消息资源文件

在这里插入图片描述

添加国际化消息配置类

@Configuration
public class MessageConfig implements WebMvcConfigurer {/*** 国际化拦截器*/private LocaleChangeInterceptor localeChangeInterceptor;/*** 初始化国际化解析器* 注意:这里的bean的名称必须是“localeResolver”,这是和SpringMVC的约定* @return 基于session的国际化解析器*/@Bean(name = "localeResolver")public LocaleResolver initLocaleResolver(){SessionLocaleResolver sessionLocaleResolver = new SessionLocaleResolver();// 设置默认的国际化区域是中国(简体中文)sessionLocaleResolver.setDefaultLocale(Locale.SIMPLIFIED_CHINESE);return sessionLocaleResolver;}/*** 创建国际化拦截器* @return 国际化拦截器*/@Beanpublic LocaleChangeInterceptor localeChangeInterceptor(){if(localeChangeInterceptor != null){return localeChangeInterceptor;}localeChangeInterceptor = new LocaleChangeInterceptor();// 设置参数名,这样就可以根据请求的"param-valid-language"参数值来判断当前的语言环境localeChangeInterceptor.setParamName("param-valid-language");return localeChangeInterceptor;}@Overridepublic void addInterceptors(InterceptorRegistry registry) {registry.addInterceptor(localeChangeInterceptor());}
}

封装消息获取工具类

@Component
public class MessageHandler {@Autowiredprivate MessageSource messageSource;public String getMessage(String messageKey){Locale locale = LocaleContextHolder.getLocale();return messageSource.getMessage(messageKey, null, locale);}public String getMessage(String messageKey, Object...params){Locale locale = LocaleContextHolder.getLocale();return messageSource.getMessage(messageKey, params, locale);}
}

测试

经过上述步骤,就设置好了国际化消息的基本配置,下面创建一些国际化消息以及测试接口来测试一下:
在这里插入图片描述
在这里插入图片描述

	@Autowiredprivate MessageHandler messageHandler;@GetMapping("/messageTest")public ResultVO messageTest(){return new ResultVO().setCode(ResultVO.VALID_PASS).setMsg(messageHandler.getMessage("message.test"));}

测试结果如下:
在这里插入图片描述
在这里插入图片描述

@Validated 和 @Valid校验提示信息的双语化

有了上面的基础,我们再来一起设置下@Validated 和 @Valid校验提示信息的双语化

给mvc的validator设置双语化

@Configuration
public class MessageConfig implements WebMvcConfigurer {@Autowiredprivate MessageSource messageSource;/*** valid校验机制提示信息国际化设置*/@Beanpublic LocalValidatorFactoryBean validatorFactoryBean(){LocalValidatorFactoryBean localValidatorFactoryBean = new LocalValidatorFactoryBean();localValidatorFactoryBean.setValidationMessageSource(messageSource);return localValidatorFactoryBean;}@Overridepublic Validator getValidator() {return validatorFactoryBean();}
}

条件校验注解的message使用占位符

@Data
public class UserDTO {@NotNull(message = "{notNull}")private Object notNull;@Length(min = 1, max = 10, message = "{length}")private String length;@Min(value = 1, message = "{min}")private Integer min;
}

准备双语文件

在这里插入图片描述
在这里插入图片描述

测试

在这里插入图片描述
在这里插入图片描述
好了,今天就先到这里了,拜拜。


http://www.ppmy.cn/news/597260.html

相关文章

深度学习与机器学习区别

深度学习与机器学习区别 本文目录: 一、特征提取方面 1.1、机器学习 1.2、深度学习 1.3、机器学习特征提取 1.4、深度学习特征提取 1.5、深度学习特征提取例子 二、数据量和计算性能要求 三、算法代表 3.1、朴素贝叶斯算法 3.2、决策树 四、神经网络 一、…

[游戏开发][Unity]UnityWebRequest使用大全

首先记录个小问题 使用new UnityWebRequest的方式,最终的downloadHandler是个null 使用UnityWebRequest.Get的方式,最终的downloadHandler会是DownloadHandlerBuffer 从网站或本地下载内容,包括文本或二进制数据 IEnumerator downloadfile(st…

前端canvas实现图画工具

视频展示 前端canvas实现图画工具 作者有话说 这几天学了canvas标签,在熟悉了canvas的一些属性后我决定做有个关于canvas的一个图画工具。在b站也有看到类似的功能,在看了关于这类程序后我觉得我也可以试试,顺便巩固一下自己这几天学的知识。…

ai怎么做风景插画?这篇文章告诉你

在当今数字化时代,人工智能技术的应用已经深入到了各行各业,其中包括绘画艺术领域。AI绘画技术采用了深度学习算法和计算机视觉技术,能够生成高质量的数字图像和绘画作品。AI绘画可以学习多种绘画风格的特征,帮助艺术家更好地表达…

AJAX框架简笔画风景简单,海南风景简笔画超简单

海南风景简笔画超简单 在祖国浩淼的南海上,浮着一个风光旖旎的热带岛屿,那里有辽阔广袤的天空、澄清透明的海域、平坦柔软的沙滩,树影婆娑的椰林,它就是风景秀丽的海南岛。下面小编整理了海南风景简笔画,供大家参考! 每当我喝着椰汁,脑海里就…

春色迷人 | 江南风景水彩画欣赏

https://www.toutiao.com/a6680893948182921735/ 2019-04-18 00:00:38 古元(1919年-1996年),珠海市唐家那洲村人,曾经担任中央美术学院第四任院长、中国美术家协会副主席、中国版画家协会名誉主席,被徐悲鸿先生称誉为…

纯canvas绘制一幅包含花、草、树的风景图像

有段时间上班有点空闲,正好当时对canvas有些兴趣,就网上找了些canvas相关案例看,参考着绘制了些花、树、草这些形状,组合成一个图像。当时其实是想弄得酷炫点的,所以比较多的用随机的方式写,画面会随着刷新…

泳道图画法,很简单,要点

常用符号 2. 图形内,用动词详细描述的方式。 3. 开始符号只能有一个出口 增加一个菱形解决 4. 从上至下,从左至右的流向顺序 5. 校验说明写在流线上 6. 进程符号不做校验逻辑 矩形改菱形,更加符合规范 7. 同一路径,箭头只能有一…