我正在做一些弹簧形式验证,但是我得到了:
Failed to convert property value of type 'java.lang.String' to required type 'ja
va.util.Date' for property 'birthdate'; nested exception is java.lang.Illega
lStateException: Cannot convert value of type [java.lang.String] to required typ
e [java.util.Date] for property 'birthdate': no matching editors or conversi
on strategy found
但是,在我的modelAttribute表单中,我有:
@NotNull
@Past
@DateTimeFormat(style="S-")
private Date birthdate;
我以为DateTimeFormat对此负责?
我正在使用hibernate-validator 4.0。
答案 0 :(得分:10)
您有可能必须在控制器中使用注册CustomDateEditor
来将字符串转换为日期。下面的示例方法在您的控制器中,但您必须更改日期格式以匹配您正在使用的任何内容。
@InitBinder
public void initBinder(WebDataBinder binder) {
CustomDateEditor editor = new CustomDateEditor(new SimpleDateFormat("MM/dd/yyyy"), true);
binder.registerCustomEditor(Date.class, editor);
}
答案 1 :(得分:4)
要使用@DateTimeFormat
,您需要安装FormattingConversionServiceFactoryBean
。 <mvc:annotation-driven>
隐含地做,但如果你不能使用它,你需要这样的东西:
<bean id="conversionService"
class="org.springframework.format.support.FormattingConversionServiceFactoryBean" />
<bean id="annotationMethodHandlerAdapter"
class="org.springframework.web.portlet.mvc.annotation.AnnotationMethodHandlerAdapter">
<property name="webBindingInitializer">
<bean id="configurableWebBindingInitializer"
class="org.springframework.web.bind.support.ConfigurableWebBindingInitializer">
<property name="validator"><ref bean="validator"/>
<proeprty name = "conversionService" ref = "conversionService" />
</bean>
</property>
</bean>