Spring 使用弹簧&x27;设置字段错误默认消息的消息源

Spring 使用弹簧&x27;设置字段错误默认消息的消息源,spring,validation,spring-mvc,bean-validation,Spring,Validation,Spring Mvc,Bean Validation,验证表单支持对象后,我有一个BindingResult,其中包含FieldError列表。每个FieldError都有一条defaultMessage。该消息集是如何设置的,为什么不使用我的Spring MessageSource?我希望默认消息是从Spring的MessageSource派生的 编辑: 我发现FieldError对象中的错误代码设置正确。只是该对象中的默认消息不是来自我的MessageSource。例如,当我为一个整型字段输入字符串时,我希望它从messages.propert

验证表单支持对象后,我有一个BindingResult,其中包含FieldError列表。每个FieldError都有一条defaultMessage。该消息集是如何设置的,为什么不使用我的Spring MessageSource?我希望默认消息是从Spring的MessageSource派生的

编辑: 我发现FieldError对象中的错误代码设置正确。只是该对象中的默认消息不是来自我的MessageSource。例如,当我为一个整型字段输入字符串时,我希望它从messages.properties获取我的消息:

typeMismatch=Invalid type was entered.
获取该消息的唯一方法是获取FieldError对象并手动将其传递到MessageSource,如下所示:

messageSource.getMessage(fieldError, null);  // This gets my message from messages.properties.
如果您使用的是,则可以在验证器实现类的MessageSource中为消息指定键,通常使用ValidationUtils方法。他有一个很好的例子

如果您使用的不是JSR-303Bean验证之类的验证器,Spring还将尝试按照约定进行验证

假设您有一个名为“Address”的表单支持对象,其中有一个名为“zipcode”的int字段。如果用户为zipcode字段输入字符串,默认情况下Spring将使用并在消息源中查找名为“typeMismatch.Address.zipcode”的键。如果找不到该键,它将尝试“typeMismatch.zipcode”,然后是“typeMismatch.int”,'然后是'类型不匹配'


或者,您可以自己实现。

我可以看到FieldError对象中设置了正确的错误代码。只是该对象中的默认消息不是来自我的MessageSource。我必须调用messageSource.getMessage(fieldError,null)来获取我的消息。我希望FieldError对象中的默认消息自动来自我的MessageSource。您是否可以添加一些更具体的代码示例,以引用您看到问题所在的对象属性?可能是bean注释、消息键等?你解决了这个问题吗?对不起,我不记得我们在那个项目上做了什么。不幸的是,我也无法访问该项目的源代码。