springboot+mybatis+thymeleaf關於前後臺日期格式化問題總結
首先資料庫欄位是:date和datetime型別
對應的mybatis對映檔案的jdbcType是DATE和TIMESTAMP
第一個問題:表單提交資料含date型別的引數
如果後臺不做任何處理的話會直接報錯,大概意思是字串String不能轉化為Date型別
方法一:在啟動類加入格式化程式碼,該方法相容三種類型格式的引數,其他格式稍作修改即可
private static final String dateFormat = "yyyy-MM-dd HH:mm:ss"; private static final String shortDateFormat = "yyyy-MM-dd"; @Bean public Converter<String, Date> addNewConvert() { return new Converter<String, Date>() { @Override public Date convert(String value) { if("".equals(value) || value == null) { return null; } value = value.trim(); try { if(value.contains("-")) { SimpleDateFormat formatter; if(value.contains(":")) { formatter = new SimpleDateFormat(dateFormat); }else { formatter = new SimpleDateFormat(shortDateFormat); } Date dtDate = formatter.parse(value); return dtDate; }else if(value.matches("^\\d+$")) { Long lDate = new Long(value); return new Date(lDate); } } catch (Exception e) { throw new RuntimeException(String.format("parser %s to Date fail", value)); } throw new RuntimeException(String.format("parser %s to Date fail", value)); } }; }
這種方法的結果是:
優點: 在用thymeleaf模板的時候,在前臺頁面 我可以根據頁面的需要隨意的格式化成想要的顯示效果
缺點:在介面訪問的時候,比如postman測試介面,這個時候時間會直接顯示為一個時間戳
問題二:讀取資料的時候時間格式不對,顯示的是時間戳,或者是國際格式的時間;對於時間戳解決方法
解決方法:在bean類中對應的屬性上加上註解
@JsonFormat(pattern="yyyy-MM-dd HH:mm:ss",timezone = "GMT+5:30")
pattern是格式累心,timezone是時間偏移量;我的專案應用於印度市場所有時間偏移量是+5:30,北京時間是+8
這種方法在介面測試中有用,在thymeleaf裡面無效,用#dates.format(date,'yyyy-MM-dd hh:mm:dd')格式也無效
方法二:直接將bean類的對應屬性的型別改為String型別;
優點:表單提交的時候 後臺不需要做任何處理,可以直接接受string引數
缺點:1.比如是一個datetime型別的,頁面顯示不要時分秒了 就得單獨對其進行格式化
2.假如需要對時間進行計算(比如計算兩個時間差),又得重新轉型別
權衡利弊,根據實際情況取捨吧;
平時做專案的時候遇到幾次,記錄的時候一下子也想不到所有情況,如有補充,敬請留言