使用spring的mvc,直接將頁面參數綁定到對象中,對象中有屬性爲Date時會報錯,此時須要處理下。java
一樣的,其餘的須要處理的類型也能夠用這種方法。web
在controller中加入代碼spring
@InitBinder protected void initBinder(HttpServletRequest request, ServletRequestDataBinder binder) throws Exception { //對於須要轉換爲Date類型的屬性,使用DateEditor進行處理 binder.registerCustomEditor(Date.class, new DateEditor(TIMEFORMAT, true)); }
DateEditor爲自定義的處理類,繼承自PropertyEditorSupport,處理方法爲public void setAsText(String text) throws IllegalArgumentExceptionmvc
package com.elong.activity.web.filter; import java.beans.PropertyEditorSupport; import java.text.DateFormat; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Date; import com.elong.common.util.StringUtils; /** * * (入參轉化) * * <p> * 修改歷史: <br> * 修改日期 修改人員 版本 修改內容<br> * -------------------------------------------------<br> * 2015年6月15日 下午6:16:17 user 1.0 初始化建立<br> * </p> * * @author Peng.Li * @version 1.0 * @since JDK1.7 */ public class DateEditor extends PropertyEditorSupport { private static final DateFormat DATEFORMAT = new SimpleDateFormat("yyyy-MM-dd"); private static final DateFormat TIMEFORMAT = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); private DateFormat dateFormat; private boolean allowEmpty = true; public DateEditor() { } public DateEditor(DateFormat dateFormat) { this.dateFormat = dateFormat; } public DateEditor(DateFormat dateFormat, boolean allowEmpty) { this.dateFormat = dateFormat; this.allowEmpty = allowEmpty; } /** * Parse the Date from the given text, using the specified DateFormat. */ @Override public void setAsText(String text) throws IllegalArgumentException { if (this.allowEmpty && StringUtils.isBlank(text)) { // Treat empty String as null value. setValue(null); } else { try { if (this.dateFormat != null) setValue(this.dateFormat.parse(text)); else { if (text.contains(":")) setValue(TIMEFORMAT.parse(text)); else setValue(DATEFORMAT.parse(text)); } } catch (ParseException ex) { throw new IllegalArgumentException("Could not parse date: " + ex.getMessage(), ex); } } } /** * Format the Date as String, using the specified DateFormat. */ @Override public String getAsText() { Date value = (Date) getValue(); DateFormat dateFormat = this.dateFormat; if (dateFormat == null) dateFormat = TIMEFORMAT; return (value != null ? dateFormat.format(value) : ""); } }
第二種是使註解的方式:ide
import org.springframework.format.annotation.DateTimeFormat;this
/** * 入住日期 */ @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss") private Date checkInTime; /** * 離店日期 */ @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss") private Date checkOutTime;
詳細說明見博客:http://relive123-yahoo-com-cn.iteye.com/blog/1678376spa