春天验证默认邮件(Spring validations default messages)

2019-08-02 13:01发布

我需要以编程方式获得在控制器中得到解决的错误消息。 对于typeMismatch错误的默认验证消息不是从我的messages.properties文件填充。 我有一个表格背衬对象,其中一个字段是一个整数。 如果我提交的字符串为那场我得到:

Failed to convert property value of type 'java.lang.String' to required type 'java.lang.Integer' for property 'establishedYear'; nested exception is java.lang.NumberFormatException: For input string: "1995a"

如在ObjectError缺省消息。 这里是我的控制器,其输出:

  @RequestMapping(method = RequestMethod.POST)
  public @ResponseBody FormJSONResponse postForm(@Valid ProfileEditCompanyForm profileEditCompanyForm, BindingResult result) throws Exception {    
    if (result.hasErrors()) {
      for (ObjectError objectError : result.getAllErrors()) {
        System.out.println(objectError.getDefaultMessage());  // THIS IS NOT MY MESSAGE, BUT SHOULD BE
      }
    }
    ... other stuff ...
  }

所以我增加了一个messages.properties与一些测试消息WEB-INF / classes下,看看我是否能覆盖该默认消息:

typeMismatch.profileEditCompanyForm.establishedYear=test 1
typeMismatch.establishedYear=test 2
typeMismatch.java.lang.Integer=test 3
typeMismatch=test 4
profileEditCompanyForm.establishedYear=test 5
establishedYear=test 6

在我的应用程序-servlet.xml文件我有:

<mvc:annotation-driven conversion-service="conversionService" validator="validator"/>

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

<bean id="validator" class="org.springframework.validation.beanvalidation.LocalValidatorFactoryBean">
  <property name="validationMessageSource" ref="messageSource"/>
</bean>

为什么没有拿起我的任何消息从我的messages.properties文件?

Answer 1:

相反在你的Spring上下文试试这个:

<bean id="messageSource"
    class="org.springframework.context.support.ReloadableResourceBundleMessageSource">
    <property name="basename" value="WEB-INF/classes/messages" />
</bean>

然后里面的“WEB-INF / classes中”文件夹中创建一个文件调用:“messages.properties”

记为“messages.properties”的内容,你必须提供这样的:

typeMismatch.pathValueInsideYourJSPform:input= Your Message 

希望这可以帮助你!

这里是一个样本也



Answer 2:

尝试指定的完整路径,并尝试

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


Answer 3:

显然,我要运行通过Spring的MessageSource的FieldError对象。 我希望这是自动完成的。 我发现我的答案在这里:

如何获得错误文本在控制器从BindingResult



文章来源: Spring validations default messages