为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

BIG阳 2023-09-27 14:52:19
我正在使用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 时,也会发生同样的情况。尺码.留言.你能给些建议么?
查看完整描述

1 回答

?
GCT1015

TA贡献1827条经验 获得超4个赞

要点是 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 会在包中查找消息但不会插入参数,而是清理字符串并去掉任何大括号。


查看完整回答
反对 回复 2023-09-27
  • 1 回答
  • 0 关注
  • 39 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信