Spring验证默认消息

时间:2012-11-09 19:42:33

标签: spring validation spring-mvc error-handling messages

我需要在控制器中以编程方式获取已解决的错误消息。 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 ...
  }

所以我在WEB-INF / classes中添加了一个messages.properties,其中包含一些测试消息,看看是否可以覆盖该默认消息:

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

在我的app-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文件中获取任何消息?

3 个答案:

答案 0 :(得分:5)

请在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 

希望这能帮到你!

这里还有一个sample

答案 1 :(得分:0)

尝试指定完整路径并尝试

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

答案 2 :(得分:0)

显然我必须通过Spring MessageSource运行FieldError对象。我希望这是自动完成的。我在这里找到了答案:

How to get error text in controller from BindingResult