本地化的Spring Boot验证消息中未解析消息参数

spc16670

我正在使用Spring Boot 2.1.8构建一个项目,我的POM中spring-boot-starter-web,我可以看到Maven将hibernate-validator 6.0.17拖到了类路径上。

我的消息在资源文件夹中,并且它们似乎可以正确查找,因此当我更改语言环境时,Spring将从正确的文件中加载消息。

我的@RestController中的相关方法采用@Valid和@RequestBody注释的DTO。当DTO验证失败时,它将触发我的控制器通知中的ResponseEntityExceptionHandler#handleMethodArgumentNotValid()触发。

我的DTO具有以以下方式注释的字段: 在此处输入图片说明

我的messages.properties具有以下条目:

在此处输入图片说明

这是我的消息写到响应的方式: 在此处输入图片说明

如您所见,消息参数未插入,而是大括号被剥夺了-当我使用{0}而不是{min}或让Size注释使用默认消息javax.validation.constraints时,也会发生同样的情况。大小消息。

你能给些建议么?

spc16670

这个答案帮助我了解了问题所在。

要点是,Hibernate解析的消息最终将成为BindingResult中的默认消息。

因此,应该:

  1. 从自定义定义的消息中删除括号,然后使用:
  String msg = messageSource.getMessage(e.getDefaultMessage(), e.getArguments(), locale);

要正确查找内插所有参数的消息。

要么

  1. 完全放弃自定义的消息,而依赖于Spring消息代码-例如,对于Size注释,在message.properties中使用Size.model.field和代码进行查找,例如:
String msg = messageSource.getMessage(e, locale);

我的期望是,来自BindingResult的默认消息将具有完全内插的文本,但看来,如果该消息位于括号中,则Hibernate会在捆绑包中查找该消息,但不对参数进行插值,而是对字符串进行清理并去除所有花括号。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

symfony日期验证本地化

来自分类Dev

如何为Spring消息本地化启用外来字符?

来自分类Dev

如何在Spring 3 / Thymeleaf中显示带有参数的本地化消息

来自分类Dev

在Web Api中本地化OAuth消息

来自分类Dev

如何使用SpEL处理Thymeleaf中的本地化消息

来自分类Dev

带参数的本地化错误消息

来自分类Dev

C ++中的本地化

来自分类Dev

验证消息在发布后不再本地化

来自分类Dev

如何本地化Bean验证消息

来自分类Dev

从APK删除未使用的本地化

来自分类Dev

Spring Data REST(使用Spring Boot)-休眠验证本地化

来自分类Dev

sql server中的信息消息是否已本地化?

来自分类Dev

jQuery验证本地化

来自分类Dev

Spring Boot本地化问题-接受语言标头

来自分类Dev

Thymeleaf和Spring Boot无法从本地化文件中读取属性-出现问号而不是本地化的字符串

来自分类Dev

如何获取本地化的错误消息?

来自分类Dev

ASP.NET CORE 3.1中的数据注释和错误验证消息的本地化

来自分类Dev

如何使本地启动到Spring Boot以本地化消息?

来自分类Dev

ASP.NET MVC验证消息未本地化

来自分类Dev

基于从MVC中的应用程序选择语言的必填字段验证消息的本地化

来自分类Dev

如何获取本地化的错误消息?

来自分类Dev

symfony日期验证本地化

来自分类Dev

Rails 4中错误消息的嵌套属性本地化

来自分类Dev

Spring Web MVC:国际化/本地化:找不到消息

来自分类Dev

Spring和jQuery验证:如何使用本地化字符串?

来自分类Dev

如何本地化法语中内置消息的AspNetCore?

来自分类Dev

winforms中的本地化

来自分类Dev

DDD中的本地化

来自分类Dev

自定义验证的本地化