springboot全局日期格式化的兩種方式
方式一是配置參數(shù)
參數(shù)配置的方式就是在json序列化的時(shí)候,當(dāng)字段為日期類型的時(shí)候的format類型,就相當(dāng)于在所有日期字段上加了一個(gè)注解
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = 'yyyy-MM-dd HH:mm:ss'),但是每個(gè)字段都加注解太麻煩,所以直接使用全局配置來實(shí)現(xiàn)
參數(shù)配置也分為兩種配置
第一種是yml的配置
spring: jackson: #參數(shù)意義: #JsonInclude.Include.ALWAYS 默認(rèn) #JsonInclude.Include.NON_DEFAULT 屬性為默認(rèn)值不序列化 #JsonInclude.Include.NON_EMPTY 屬性為 空(””) 或者為 NULL 都不序列化 #JsonInclude.Include.NON_NULL 屬性為NULL 不序列化 default-property-inclusion: ALWAYS time-zone: GMT+8 date-format: yyyy-MM-dd HH:mm:ss
第二中配置方式是properties文件配置
#jackson相關(guān)配置spring.jackson.date-format = yyyy-MM-dd HH:mm:ss#時(shí)區(qū)必須要設(shè)置spring.jackson.time-zone= GMT+8#ALWAYS的意思是即時(shí)屬性為null,仍然也會(huì)輸出這個(gè)key,對(duì)應(yīng)yml里面的注釋里面的類型spring.jackson.default-property-inclusion=ALWAYS
方式二是自定義轉(zhuǎn)換類
先定義一個(gè)string轉(zhuǎn)date的轉(zhuǎn)換類,需要實(shí)現(xiàn)convert接口
import org.apache.commons.lang.StringUtils;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;/** * 全局handler前日期統(tǒng)一處理 * @author * @date 2019-06-03 */@Componentpublic class DateConverterConfig implements Converter<String, Date> { private static final List<String> formarts = new ArrayList<>(4); private static final String YYYY_MM = 'yyyy-MM'; private static final String YYYY_MM_DD = 'yyyy-MM-dd'; private static final String YYYY_MM_DD_HH_MM = 'yyyy-MM-dd HH:mm'; private static final String YYYY_MM_DD_HH_MM_SS = 'yyyy-MM-dd HH:mm:ss'; 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) { if (StringUtils.isBlank(source)) { return null; } source = source.trim(); 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 false value ’' + source + '’'); } } /** * 格式化日期 * @param dateStr String 字符型日期 * @param format String 格式 * @return Date 日期 */ private Date parseDate(String dateStr, String format) { Date date; try { DateFormat dateFormat = new SimpleDateFormat(format); date = dateFormat.parse(dateStr); } catch (Exception e) { throw new IllegalArgumentException(e.getLocalizedMessage()); } return date; }}
第二步是把這個(gè)轉(zhuǎn)換類添加到WebMvcConfigurationSupport
注意,當(dāng)用戶重新實(shí)現(xiàn)了WebMvcConfigurationSupport這個(gè)類之后,在yml中定義的靜態(tài)資源路徑啥的會(huì)失效,需要在這里再次添加一下靜態(tài)資源路徑
import org.springframework.context.annotation.Configuration;import org.springframework.format.FormatterRegistry;import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;import org.springframework.web.servlet.config.annotation.WebMvcConfigurationSupport;@Configurationpublic class WebMvcConfig extends WebMvcConfigurationSupport { /** * 添加自定義的Converters和Formatters. */ @Override protected void addFormatters(FormatterRegistry registry) { registry.addConverter(new DateConverterConfig()); } /** * 如果繼承了WebMvcConfigurationSupport,則在yml中配置的相關(guān)內(nèi)容會(huì)失效。 需要重新指定靜態(tài)資源 * * @param registry */ @Override public void addResourceHandlers(ResourceHandlerRegistry registry) { registry.addResourceHandler('/**').addResourceLocations('classpath:/static/').addResourceLocations('classpath:/resources/').addResourceLocations('classpath:/META-INF/resources/'); super.addResourceHandlers(registry); }}
到此這篇關(guān)于springboot全局日期格式化的兩種方式的文章就介紹到這了,更多相關(guān)springboot全局日期格式化內(nèi)容請(qǐng)搜索好吧啦網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持好吧啦網(wǎng)!
相關(guān)文章:
1. php使用正則驗(yàn)證密碼字段的復(fù)雜強(qiáng)度原理詳細(xì)講解 原創(chuàng)2. 基于javaweb+jsp實(shí)現(xiàn)企業(yè)車輛管理系統(tǒng)3. HTML5實(shí)戰(zhàn)與剖析之觸摸事件(touchstart、touchmove和touchend)4. ASP將數(shù)字轉(zhuǎn)中文數(shù)字(大寫金額)的函數(shù)5. Jsp servlet驗(yàn)證碼工具類分享6. jscript與vbscript 操作XML元素屬性的代碼7. 基于PHP做個(gè)圖片防盜鏈8. Jsp+Servlet實(shí)現(xiàn)文件上傳下載 文件列表展示(二)9. asp.net core 認(rèn)證和授權(quán)實(shí)例詳解10. XML在語音合成中的應(yīng)用
