我有自定义 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/