我正在使用Spring Boot 2.1.8构建一个项目,我的POM中有spring-boot-starter-web,我可以看到Maven将hibernate-validator 6.0.17拖到了类路径上。
我的消息在资源文件夹中,并且它们似乎可以正确查找,因此当我更改语言环境时,Spring将从正确的文件中加载消息。
我的@RestController中的相关方法采用@Valid和@RequestBody注释的DTO。当DTO验证失败时,它将触发我的控制器通知中的ResponseEntityExceptionHandler#handleMethodArgumentNotValid()触发。
我的messages.properties具有以下条目:
如您所见,消息参数未插入,而是大括号被剥夺了-当我使用{0}而不是{min}或让Size注释使用默认消息javax.validation.constraints时,也会发生同样的情况。大小消息。
你能给些建议么?
这个答案帮助我了解了问题所在。
要点是,Hibernate解析的消息最终将成为BindingResult中的默认消息。
因此,应该:
String msg = messageSource.getMessage(e.getDefaultMessage(), e.getArguments(), locale);
要正确查找内插所有参数的消息。
要么
String msg = messageSource.getMessage(e, locale);
我的期望是,来自BindingResult的默认消息将具有完全内插的文本,但看来,如果该消息位于括号中,则Hibernate会在捆绑包中查找该消息,但不对参数进行插值,而是对字符串进行清理并去除所有花括号。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句