Java 未从资源bunlde获取Spring验证消息

Java 未从资源bunlde获取Spring验证消息,java,spring,validation,spring-mvc,Java,Spring,Validation,Spring Mvc,我有一个自定义的Spring验证器,在这里我拒绝值: ValidationUtils.rejectIfEmpty(错误,“lastName”,“field.required”) 另外,在/resourcesmaven的文件夹中,我有一个名为messages.properties的资源包。此文件包含用于验证的自定义消息: field.required=必填字段 我在Spring配置中注册了此消息源: <bean id="messageSource" class="org.springfra

我有一个自定义的Spring验证器,在这里我拒绝值:

ValidationUtils.rejectIfEmpty(错误,“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>

在我的控制器中,我手动调用验证程序:

myValidator.validate(myObject,bindingResult)

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


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

,您不应该尝试调用
getDefaultMessage()
。您应该改为使用
字段error
(它扩展了
DefaultMessageSourceResolvable
并实现了
DefaultMessageSourceResolvable
)并将其传递给您的
messageSource

messageSource.getMessage(fieldError, LOCALE);
关于
getDefaultMessage()
返回
null
:我从未使用过此接口,但查看
ValidationUtils
的代码,
defaultMessage
似乎与您想象的不一样。您正在使用:

rejectIfEmpty(Errors errors, String field, String errorCode);
而不是

rejectIfEmpty(Errors errors, String field, String errorCode, String defaultMessage);
最后一个参数是绑定结果中
FieldError
实例的一部分。由于您没有在此处传递值,因此
字段error
中的值将为空