java - 未从资源包中获取 Spring 验证消息

标签 java spring validation spring-mvc

我有自定义 Spring validator ,我拒绝值:

ValidationUtils.rejectIfEmpty(errors, "lastName", "field.required");

此外,在 /resources maven 文件夹中,我有一个名为 messages.properties 的资源包。该文件包含验证中使用的自定义消息:

field.required=必填字段

我在Spring配置中注册了这个消息源:

 <bean id="messageSource" class="org.springframework.context.support.ResourceBundleMessageSource">
        <property name="basename" value="messages"/>
 </bean>

在我的 Controller 中,我手动调用 validator :

myValidator.validate(myObject, BindingResult);

问题是 bindingResult 对象不包含来自 messages.properties 文件的自定义错误消息。

换句话说,这是null:bindingResult.getFieldErrors().get(0).getDefaultMessage(),但应该是必填字段

最佳答案

您不应该尝试调用getDefaultMessage()。您应该采用 FieldError(它扩展 DefaultMessageSourceResolvable 并实现 DefaultMessageSourceResolvable)并将其传递给您的 messageSource:

messageSource.getMessage(fieldError, LOCALE);

关于getDefaultMessage()返回null:我从未使用过这个接口(interface),但是查看ValidationUtils的代码,defaultMessage 似乎不是你想象的那样。您正在使用:

rejectIfEmpty(Errors errors, String field, String errorCode);

而不是

rejectIfEmpty(Errors errors, String field, String errorCode, String defaultMessage);

最后一个参数最终成为绑定(bind)结果中 FieldError 实例的一部分。由于您没有在此处传递值,因此 FieldError 中的值将为 null。

关于java - 未从资源包中获取 Spring 验证消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29638864/

相关文章:

java - 在 Java 中,消息生产者应该如何标识自己?

java - 解决使用javaagent命令时出现java.lang.NoClassDefFoundError异常

java - 是否可以将 Flyway、Liquibase 等数据库迁移工具与应用程序代码库集成?

java - 在 Eclipse 中,Tomcat 6 使用范围为 'provided' 的 javax.servlet-api 3.0.1

java - Spring Data Jpa项目使用ManyToMany关系时的生成查询

spring - MyBatis DB_VENDOR 不起作用

java - Apache Commons UrlValidator

java - 如何在Java中将HttpStatus代码转换为int?

c# - MVVM 获取 ContentPresenter 和 CancelEdits 的验证

JavaScript:检查日期 A 是否比日期 B 最多早/晚 3 倍