Java 未从资源bunlde获取Spring验证消息
我有一个自定义的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
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
中的值将为空