spring mvc绑定对象String转Date

使用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) : "");  
        }  
    }  

 

你可能感兴趣的:(spring mvc)