接受DateTime(Jodatime)作为SpringMVC中的请求方法参数

时间:2014-02-09 13:09:11

标签: java spring-mvc jodatime

我有一个模型类

class SomeClass {
  private DateTime myDate;
  // setter & getter
}

和控制器:

@Controller
class MyController {
  @RequestMapping("...")
  public String doStuff(@ModelAttribute("myAttribute") SomeClass value) {
    // ...
  }
}

从具有相应<input type="datetime" .../>字段的HTML5表单调用此控制器时,出现以下错误:

  

字段'myDate'上的对象'myAttribute'中的字段错误:   被拒绝的价值[2014-02-08T23:00:00.00Z];代码   [typeMismatch.myAttribute.myDate,typeMismatch.myDate,typeMismatch.org.joda.time.DateTime,typeMismatch];   参数   [org.springframework.context.support.DefaultMessageSourceResolvable:   代码[myAttribute.myDate,myDate];参数[];   默认消息[myDate]];默认消息[无法转换   类型'java.lang.String'的属性值为必需的类型   属性'myDate'的'org.joda.time.DateTime';嵌套   异常是java.lang.IllegalStateException:无法转换值   输入[java.lang.String]到必需的类型[org.joda.time.DateTime]   属性'myDate':没有匹配的编辑器或转换策略   发现]

这让我感到困惑,因为我了解manual中的7.6.5 Configuring Formatting in Spring MVC

  

如果安装完全支持Joda Time格式库,也会安装   Joda Time出现在类路径上。

转换应该只是开箱即用(我使用的是Spring 4.0和Joda时间2.3)。至少它应该找到转换器,即使格式可能是错误的。但是我认为应该尝试按照7.7 Configuring a global date & time format部分中的说明配置日期格式。有了谷歌关于HTML5日期字段和Javadoc格式的一些额外帮助,我提出了这个:

<bean id="conversionService" class="org.springframework.format.support.FormattingConversionServiceFactoryBean">
    <property name="formatterRegistrars">
        <set>
          <bean class="org.springframework.format.datetime.joda.JodaTimeFormatterRegistrar">
              <property name="useIsoFormat" value="true" />
          </bean>
        </set>
    </property>
</bean>

然而,我刚插入到applicationContext.xml中的那些行的效果根本没有效果。

那么我需要做些什么才能正确设置(另外我想避免在我的模型对象上使用@DateTimeFormat注释,因为我的模型对HTML没有任何了解所以对我来说感觉不对在该对象上附加有关HTML5格式的信息。)

1 个答案:

答案 0 :(得分:2)

您需要在spring servlet配置文件中指定以下内容,以便设置默认转换

<mvc:annotation-driven/>