如果无效日期,Spring mvc Joda Datetime转换器会失败

时间:2011-06-30 19:12:56

标签: java spring validation

我有一个域对象,我想从JSP映射包含Joda DateTime:

  
public beanClass{
  private Long id;

  @DateTimeFormat
  private DateTime start;

  getters and setters...
}

我在Spring注册了以下转换器:

  
final class StringToJodaDateTimeConverter<S, T> implements Converter<String, DateTime>    {   

  private static final DateTimeFormatter fmt = DateTimeFormat.forPattern("MM/dd/yyyy");

  public DateTime convert(String in) {
     try{
        return fmt.parseDateTime(in);
     }catch(Exception e){
        throw new IllegalArgumentException("Invalid date");
     }
   }
}

Spring显然会在我的验证器类之前命中转换器,并将使用完整错误填充我的错误消息

无法将类型为java.lang.String的属性值转换为属性sampleDate所需的类型org.joda.time.DateTime;嵌套异常是org.springframework.core.convert.ConversionFailedException:无法将值“asdf”从类型java.lang.String转换为类型org.joda.time.DateTime;嵌套异常是java.lang.IllegalArgumentException:无效日期

我想要的是从例外中获取“无效日期”消息。

有没有办法让异常消息“无效的日期”而不是要显示的整个内容?

1 个答案:

答案 0 :(得分:2)

您应该使用文件messages.properties来声明特定信息:

typeMismatch.java.util.Date = Invalid date

当然,您应该在spring-context.xml中提供有关此文件的信息

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