import java.beans.PropertyEditorSupport; import java.sql.Timestamp; import java.text.SimpleDateFormat; import org.springframework.util.StringUtils; import java.text.ParseException;
public class CustomTimestampEditor extends PropertyEditorSupport { private final SimpleDateFormat dateFormat; private final boolean allowEmpty; private final int exactDateLength; public CustomTimestampEditor(SimpleDateFormat dateFormat, boolean allowEmpty) { this.dateFormat = dateFormat; this.allowEmpty = allowEmpty; this.exactDateLength = -1; } public CustomTimestampEditor(SimpleDateFormat dateFormat, boolean allowEmpty, int exactDateLength) { this.dateFormat = dateFormat; this.allowEmpty = allowEmpty; this.exactDateLength = exactDateLength; } public void setAsText(String text) throws IllegalArgumentException { if ((this.allowEmpty) && (!(StringUtils.hasText(text)))) { setValue(null); } else { if ((text != null) && (this.exactDateLength >= 0) && (text.length() != this.exactDateLength)) { throw new IllegalArgumentException ( "Could not parse date: it is not exactly" + this.exactDateLength + "characters long"); } try { setValue(new Timestamp(this.dateFormat.parse(text).getTime())); } catch (ParseException ex) { throw new IllegalArgumentException ("Could not parse date: " + ex.getMessage(), ex); } } } public String getAsText() { Timestamp value = (Timestamp) getValue(); return ((value != null) ? this.dateFormat.format(value) : ""); }
}
上面为自定义的类就是将前台日期格式转换成timestamp类型。 然后再controller类的最前面加入如下方法: @InitBinder public void initBinder(WebDataBinder binder) { SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-mm-dd HH:mm:ss"); dateFormat.setLenient(false); binder.registerCustomEditor(Timestamp.class, new CustomTimestampEditor(dateFormat, true)); }
解释: binder.registerCustomEditor(Timestamp.class, new CustomTimestampEditor(dateFormat, true)); 这个方法中的new的类可以是自定义的类,也可以使用一些已有的类即已经继承并实现PropertyEditorSupport类的类。 具体默认的类有哪些可以去看PropertyEditorSupport这个类中的源码,因为你自定义的类也是继承的这个类。