spring mvc绑定对象String转Date

来源:互联网 发布:ubuntu 查看时区 编辑:程序博客网 时间:2024/05/29 18:02

使用spring的mvc,直接将页面参数绑定到对象中,对象中有属性为Date时会报错,此时需要处理下。

同样的,其他的需要处理的类型也可以用这种方法。

在controller中加入代码

@InitBinderprotected 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) : "");    }}