我正在使用构建一个项目春季启动2.1.8, 我有spring-boot-启动器-web在我的 POM 中,我可以看到 Maven 拉动休眠验证器 6.0.17到类路径上。
我的消息位于资源文件夹中,并且它们似乎已正确查找,因此当我更改区域设置时,Spring 会从正确的文件加载消息。
我的@RestController中的相关方法采用@Valid和@RequestBody注释的DTO。当 DTO 验证失败时,它会触发 ResponseEntityExceptionHandler#handleMethodArgumentNotValid() 在我的控制器建议中触发。
My DTO has a field annotated in the following manner:
我的 messages.properties 有以下条目:
This is how my message is written to the response:
正如你所看到的消息参数不会被插入,而是花括号会被去掉- 当我使用 {0} 而不是 {min} 或让 Size 注释使用默认消息 - javax.validation.constraints.Size.message 时,也会发生同样的情况。
你能给些建议么?
This https://stackoverflow.com/a/5786842/2779183答案对我理解问题出在哪里有很大帮助。
要点是 Hibernate 解析的消息最终作为 BindingResult 中的默认消息。
因此,人们应该:
- 从自定义消息中删除大括号,然后使用:
String msg = messageSource.getMessage(e.getDefaultMessage(), e.getArguments(), locale);
正确查找插入所有参数的消息。
OR
- 完全放弃自定义消息并依赖 Spring 消息代码 - 例如用于尺寸注释使用尺寸.型号.字段在 message.properties 和进行查找的代码中,例如:
String msg = messageSource.getMessage(e, locale);
我的期望是来自 BindingResult 的默认消息将具有完全插入的文本,但看起来如果消息在大括号中,Hibernate 会在包中查找消息但不会插入参数,而是清理字符串并去掉任何大括号。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)