1. 程式人生 > >SpringMVC 自動繫結資料

SpringMVC 自動繫結資料

第一種:繁重操作解決方式

不在Controller裡面寫InitBinder方法,直接在實體類裡面將DATE型別的欄位上加註解。

	/**
	 * 債務履行起始時間
	 */
	@DateTimeFormat(pattern = "yyyy-MM-dd")
	@Temporal(TemporalType.TIMESTAMP)
	private Date ZWLXQSSJ;

	/**
	 * 債務履行結束時間
	 */
	@DateTimeFormat(pattern = "yyyy-MM-dd")
	@Temporal(TemporalType.TIMESTAMP)
	private Date ZWLXJSSJ;

第二種:比較繁重操作解決方式

在Controller裡面寫InitBinder方法。

@InitBinder
protected void initBinder(WebDataBinder binder) {
        //The date format to parse or output your dates
        SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        //Create a new CustomDateEditor
        CustomDateEditor editor = new CustomDateEditor(dateFormat, true);
        //Register it as custom editor for the Date type
        binder.registerCustomEditor(Date.class, editor);
}

第三種:輕鬆解決方式

自己寫一個DATE資料繫結類,然後在Controller的initBinder方法裡直接引用。

package com.xqx.spfzj.util;

import org.apache.commons.lang.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.beans.PropertyEditorSupport;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;

public class SpecialDateEditor extends PropertyEditorSupport {

    private final Logger logger = LoggerFactory.getLogger(getClass());

    @Override
    public void setAsText(String text) throws IllegalArgumentException {
    
        SimpleDateFormat yyyyMMdd_HHmmss = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        SimpleDateFormat yyyyMMdd = new SimpleDateFormat("yyyy-MM-dd");
        SimpleDateFormat yyyyMM = new SimpleDateFormat("yyyy-MM");
        
        Date date = null;
        try {
            if(StringUtils.isNotBlank(text)){
                date = yyyyMMdd_HHmmss.parse(text);
            }
        } catch (ParseException e) {
            try {
                date = yyyyMMdd.parse(text);
            } catch (ParseException e1) {
                try{
                    date = yyyyMM.parse(text);
                }catch (Exception e2) {
                    logger.error("自動繫結日期資料出錯", e);
                }
            }
        }
        setValue(date);
    }
}
@InitBinder
	protected void initBinder(WebDataBinder binder) {
		binder.registerCustomEditor(Date.class, new com.xqx.spfzj.util.SpecialDateEditor());
	}