springmvc,可以自动将数据注入到: “name”值相同,便注入,比如String Integer 还有我们自定义的bean,比如User。
但是date类型的数据,如果前台传的是用"/"划分的日期类型,便能注入。
但是如果前台传过来是"-"划分的日期类型,不能自动注入,会报400错误。
在form表单中,input type是date,那么表单传递的date数据是"-"划分的。
如果想支持,“-”划分的date类型数据,可以自定义转换器。
方法一:不用annotation-driven
public class DateEditor extends PropertyEditorSupport { @Override public String getAsText() { return super.getAsText(); } @Override public void setAsText(String text) throws IllegalArgumentException { String pattern; SimpleDateFormat dateFormat = new SimpleDateFormat(); if(text.indexOf("-")==-1){ pattern = "yyyy/MM/dd"; }else{ pattern = "yyyy-MM-dd"; } System.out.println("pattern = " + pattern); dateFormat.applyPattern(pattern); try { setValue(dateFormat.parse(text)); } catch (ParseException e) { e.printStackTrace(); } } }
public class MyWebBind implements WebBindingInitializer { @Override public void initBinder(WebDataBinder webDataBinder, WebRequest webRequest) { webDataBinder.registerCustomEditor(Date.class,new DateEditor()); } }
<bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter"> <property name="webBindingInitializer"> <bean class="com.core.MyWebBind"></bean> </property> </bean>
方法二:用annotation-driven
public class DateConverter implements Converter<String, Date> { public Date convert(String source) { String pattern; SimpleDateFormat dateFormat = new SimpleDateFormat(); if(source.indexOf("-")==-1){ pattern = "yyyy/MM/dd"; }else{ pattern = "yyyy-MM-dd"; } System.out.println("pattern = " + pattern); dateFormat.applyPattern(pattern); try { return dateFormat.parse(source); } catch (ParseException e) { e.printStackTrace(); } return null; } }
<bean id="conversionService" class="org.springframework.format.support.FormattingConversionServiceFactoryBean"> <property name="converters"> <util:list> <bean class="com.core.DateConverter"/> </util:list> </property> </bean> <mvc:annotation-driven conversion-service="conversionService"/>