coding++:SpringBoot 處理前台字符串日期自動轉換成后台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方法:

import org.springframework.core.convert.converter.Converter; import org.springframework.stereotype.Component; import java.text.DateFormat; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Date; import java.util.List; /** * @author MLQ * @Description: 全局handler前日期統一處理 * @date 2020年1月6日14:25:03 */ @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種和第二種


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM