1. 程式人生 > >springmvc/springboot處理前臺字串日期自動轉換成後臺date型別的三種辦法

springmvc/springboot處理前臺字串日期自動轉換成後臺date型別的三種辦法

問題還原:當前臺提交日期格式資料到後臺儲存時,已辦以字串的形式傳輸,如果後臺是data型別接受的話會報400格式錯誤。這時候就需要處理一下:  第0種(最low的方式):後臺用String型別欄位接收,如果需要使用再換成date。

第1種:使用@DateTimeFormat(pattern = “yyyy-MM-dd HH:mm:ss”)註解在實體欄位上, 這種方式的優點是:可以靈活的定義接收的型別  缺點很明顯:不能全域性統一處理,需要為每個需要轉換欄位都加註解太麻煩

第2種:寫一個BaseController,每一個需要處理的controller繼承這個BaseController,在BaseController裡使用@InitBinder寫一個全域性轉換日期方法:

@InitBinder public void initBinder(ServletRequestDataBinder binder) {     SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");     binder.registerCustomEditor(Date.class, new CustomDateEditor(sdf, true));         } 這種方式的優點是:可以全域性統一處理,不用再關注具體需要轉換的日期欄位  缺點就是:只能定義一種日期型別,我定義了”yyyy-MM-dd”就沒法定義”yyyy-MM-dd HH:mm:ss”,  如果我前臺不同頁面過來的日期格式不一樣就不好辦了

第3種(放大招了):自定義DateConverterConfig實現一下spring提供的Converter,重寫裡面的convert方法:

/**  * 全域性handler前日期統一處理  * @author zhanghang  * @date 2018/1/11  */ @Component public class DateConverterConfig implements Converter<String, Date> {

    private static final List<String> formarts = new ArrayList<>(4);     static{         formarts.add("yyyy-MM");         formarts.add("yyyy-MM-dd");         formarts.add("yyyy-MM-dd hh:mm");         formarts.add("yyyy-MM-dd hh:mm:ss");     }

    @Override     public Date convert(String source) {         String value = source.trim();         if ("".equals(value)) {             return null;         }         if(source.matches("^\\d{4}-\\d{1,2}$")){             return parseDate(source, formarts.get(0));         }else if(source.matches("^\\d{4}-\\d{1,2}-\\d{1,2}$")){             return parseDate(source, formarts.get(1));         }else if(source.matches("^\\d{4}-\\d{1,2}-\\d{1,2} {1}\\d{1,2}:\\d{1,2}$")){             return parseDate(source, formarts.get(2));         }else if(source.matches("^\\d{4}-\\d{1,2}-\\d{1,2} {1}\\d{1,2}:\\d{1,2}:\\d{1,2}$")){             return parseDate(source, formarts.get(3));         }else {             throw new IllegalArgumentException("Invalid boolean value '" + source + "'");         }     }

    /**      * 格式化日期      * @param dateStr String 字元型日期      * @param format String 格式      * @return Date 日期      */     public  Date parseDate(String dateStr, String format) {         Date date=null;         try {             DateFormat dateFormat = new SimpleDateFormat(format);             date = dateFormat.parse(dateStr);         } catch (Exception e) {

        }         return date;     }

} 我這裡是springboot專案通過@Component註解將這個類交給spring容器託管的,如果springmvc專案還需要到xml配置檔案註冊這個類  優點很明顯了:足夠靈活,在靜態程式碼塊裡自定義任意格式日期,在重寫的方法裡在配上對應的正則表示式就行,也可以做到全域性統一處理,兼顧了第1種和第二種,完美666! 原文:https://blog.csdn.net/eumenides_/article/details/79033505