使用spring的mvc,直接将页面参数绑定到对象中,对象中有属性为Date时会报错,此时需要处理下。
同样的,其他的需要处理的类型也可以用这种方法。
在controller中加入代码
- @InitBinder
- protected void initBinder(HttpServletRequest request,
- ServletRequestDataBinder binder) throws Exception {
- //对于需要转换为Date类型的属性,使用DateEditor进行处理
- binder.registerCustomEditor(Date.class, new DateEditor());
- }
DateEditor为自定义的处理类,继承自PropertyEditorSupport,处理方法为public void setAsText(String text) throws IllegalArgumentException
- import org.springframework.util.StringUtils;
- import java.beans.PropertyEditorSupport;
- import java.text.DateFormat;
- import java.text.ParseException;
- import java.text.SimpleDateFormat;
- import java.util.Date;
- 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.hasText(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) : "");
- }
- }