我有一个模型类
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格式的信息。)
答案 0 :(得分:2)
您需要在spring servlet配置文件中指定以下内容,以便设置默认转换
<mvc:annotation-driven/>