国产成人精品久久免费动漫-国产成人精品天堂-国产成人精品区在线观看-国产成人精品日本-a级毛片无码免费真人-a级毛片毛片免费观看久潮喷

您的位置:首頁(yè)技術(shù)文章
文章詳情頁(yè)

Springboot 全局日期格式化處理的實(shí)現(xiàn)

瀏覽:86日期:2023-05-16 09:19:36

最近部門幾位同事受了一些委屈相繼離職,共事三年臨別之際頗有不舍,待一切手續(xù)辦妥帖,寒暄過后送他們出公司,幾個(gè)老哥臨別時(shí)沖我鬼魅一笑,我頓時(shí)心里一緊有種不好的預(yù)感,這事絕對(duì)沒有這么簡(jiǎn)單。等我接手這幾個(gè)大佬的項(xiàng)目后,應(yīng)驗(yàn)了我的預(yù)感,此刻我居然有點(diǎn)后悔,為啥送別之時(shí)沒揍他們一頓!哈哈哈~ 而這種打人的沖動(dòng),在我開始優(yōu)化幾位老哥的項(xiàng)目時(shí)候,變得越來越強(qiáng)烈。

Springboot 全局日期格式化處理的實(shí)現(xiàn)

有個(gè)坑

技術(shù)部每個(gè)月都會(huì)組織一下代碼走查及優(yōu)化,以前是各自審查優(yōu)化自己的項(xiàng)目,如今幾位老哥的離職他們的項(xiàng)目就落到了我的頭上。對(duì)于程序員來說最痛苦的事情就是接手別人的項(xiàng)目,還要做優(yōu)化改造,因?yàn)檫@一點(diǎn)也不比重構(gòu)一遍項(xiàng)目簡(jiǎn)單。不過,軍令在前,沒辦法硬著頭皮上吧!

第一個(gè)優(yōu)化的點(diǎn)就讓我有點(diǎn)崩潰,這幾個(gè)大佬的技能能力很強(qiáng),一直都是我學(xué)習(xí)的榜樣,但在項(xiàng)目里幾乎所有的日期格式化都這樣用 SimpleDateFormat ,像如下代碼這樣實(shí)現(xiàn),emm~ ,受過傷的男人怎么啥事都做的出來,哈哈哈~

SvcOrderDailyStatisticsPo orderDailyStatisticsPo = new SvcOrderDailyStatisticsPo();SimpleDateFormat dateFormat = new SimpleDateFormat('yyyy-MM-dd');Date stationTime = dateFormat.parse(dateFormat.format(svcWorkOrderPo.getPayEndTime()));orderDailyStatisticsPo.setStatisticalDate(stationTime);

而且項(xiàng)目中的時(shí)間和日期API用的也比較混亂,考慮到 java.util.Date 和 java.util.Calendar 不支持時(shí)區(qū),且非線程安全,對(duì)于日期的計(jì)算相對(duì)繁瑣,技術(shù)部一致要求用JDK1.8以后的 java.time LocalDateTime。但不少人還是在用 java.util.Date 和 java.util.Calendar 處理日期。

優(yōu)化方案

時(shí)間格式化是使用頻率非常高的,如何讓時(shí)間格式化變得既簡(jiǎn)單又不用重復(fù)造輪子,那么就應(yīng)將它抽象出來,作為全局的日期格式化處理,下面就結(jié)合實(shí)踐簡(jiǎn)單介紹下幾種優(yōu)化方案。

測(cè)試地址:http://127.0.0.1:8080/timeTest

@GetMapping('/timeTest') public OrderInfo timeTest() { OrderInfo order = new OrderInfo(); order.setCreateTime(LocalDateTime.now()); order.setUpdateTime(new Date()); return order; }

1、@JsonFormat注解

使用@JsonFormat注解格式化時(shí)間,應(yīng)該算是一個(gè)基本操作了,大部分開發(fā)者都應(yīng)用此種方式,簡(jiǎn)單方便。

/** * @Author: xiaofu * @Description: */public class OrderInfo { @JsonFormat(locale = 'zh', timezone = 'GMT+8', pattern = 'yyyy-MM-dd HH:mm:ss') private LocalDateTime createTime; @JsonFormat(locale = 'zh', timezone = 'GMT+8', pattern = 'yyyy-MM-dd HH:mm:ss') private Date updateTime; public LocalDateTime getCreateTime() { return createTime; } public void setCreateTime(LocalDateTime createTime) { this.createTime = createTime; } public Date getUpdateTime() { return updateTime; } public void setUpdateTime(Date updateTime) { this.updateTime = updateTime; }}

測(cè)試一下結(jié)果,發(fā)現(xiàn) Date 類型和 LocalDateTime 類型都格式化成功,但還是有個(gè)問題,這樣做仍然比較繁瑣,每個(gè)實(shí)體類的日期字段都要加@JsonFormat注解,重復(fù)的工作量也不小。接著往下看~

Springboot 全局日期格式化處理的實(shí)現(xiàn)

2、全局配置 (1)

Springboot 已經(jīng)為我們提供了日期格式化 ${spring.jackson.date-format:yyyy-MM-dd HH:mm:ss},這里我們需要進(jìn)行全局配置,配置比較簡(jiǎn)單,也無需在實(shí)體類屬性上添加@JsonFormat注解。

/** * @Author: xiaofu * @Description: */public class OrderInfo { //@JsonFormat(locale = 'zh', timezone = 'GMT+8', pattern = 'yyyy-MM-dd HH:mm:ss') private LocalDateTime createTime; //@JsonFormat(locale = 'zh', timezone = 'GMT+8', pattern = 'yyyy-MM-dd HH:mm:ss') private Date updateTime; public LocalDateTime getCreateTime() { return createTime; } public void setCreateTime(LocalDateTime createTime) { this.createTime = createTime; } public Date getUpdateTime() { return updateTime; } public void setUpdateTime(Date updateTime) { this.updateTime = updateTime; }}

只需要用@Configuration定義一個(gè)配置類,注入兩個(gè)Bean即可完成全局日期格式化處理,這種方式也是當(dāng)前我項(xiàng)目中正在用的方式。

/** * @Author: xiaofu * @Description: */@Configurationpublic class LocalDateTimeSerializerConfig { @Value('${spring.jackson.date-format:yyyy-MM-dd HH:mm:ss}') private String pattern; @Bean public LocalDateTimeSerializer localDateTimeDeserializer() { return new LocalDateTimeSerializer(DateTimeFormatter.ofPattern(pattern)); } @Bean public Jackson2ObjectMapperBuilderCustomizer jackson2ObjectMapperBuilderCustomizer() { return builder -> builder.serializerByType(LocalDateTime.class, localDateTimeDeserializer()); }}

這種方式可支持 Date 類型和 LocalDateTime 類型并存,那么有一個(gè)問題就是現(xiàn)在全局時(shí)間格式是yyyy-MM-dd HH:mm:ss,但有的字段卻需要yyyy-MM-dd格式咋整?

那就需要配合@JsonFormat注解使用,在特定的字段屬性添加@JsonFormat注解即可,因?yàn)锧JsonFormat注解優(yōu)先級(jí)比較高,會(huì)以@JsonFormat注解標(biāo)注的時(shí)間格式為主。

3、全局配置 (2)

這種全局配置的實(shí)現(xiàn)方式與上邊的效果是一樣的,不過,要注意的是使用這種配置后,字段手動(dòng)配置@JsonFormat注解將不再生效。

/** * @Author: xiaofu * @Description: */public class OrderInfo { //@JsonFormat(locale = 'zh', timezone = 'GMT+8', pattern = 'yyyy-MM-dd HH:mm:ss') private LocalDateTime createTime; //@JsonFormat(locale = 'zh', timezone = 'GMT+8', pattern = 'yyyy-MM-dd HH:mm:ss') private Date updateTime; public LocalDateTime getCreateTime() { return createTime; } public void setCreateTime(LocalDateTime createTime) { this.createTime = createTime; } public Date getUpdateTime() { return updateTime; } public void setUpdateTime(Date updateTime) { this.updateTime = updateTime; }}

/** * @Author: xiaofu * @Description: */@Configurationpublic class LocalDateTimeSerializerConfig { @Value('${spring.jackson.date-format:yyyy-MM-dd HH:mm:ss}') private String pattern; @Bean @Primary public ObjectMapper serializingObjectMapper() { ObjectMapper objectMapper = new ObjectMapper(); JavaTimeModule javaTimeModule = new JavaTimeModule(); javaTimeModule.addSerializer(LocalDateTime.class, new LocalDateTimeSerializer()); javaTimeModule.addDeserializer(LocalDateTime.class, new LocalDateTimeDeserializer()); objectMapper.registerModule(javaTimeModule); return objectMapper; } public class LocalDateTimeSerializer extends JsonSerializer<LocalDateTime> { @Override public void serialize(LocalDateTime value, JsonGenerator gen, SerializerProvider serializers) throws IOException { gen.writeString(value.format(ofPattern(pattern))); } } public class LocalDateTimeDeserializer extends JsonDeserializer<LocalDateTime> { @Override public LocalDateTime deserialize(JsonParser p, DeserializationContext deserializationContext) throws IOException { return LocalDateTime.parse(p.getValueAsString(), ofPattern(pattern)); } }}

總結(jié)

分享了一個(gè)Springboot項(xiàng)目開發(fā)過程中的一個(gè)小技巧,也順便吐槽一下項(xiàng)目?jī)?yōu)化中遇到的坑,優(yōu)化別的人的代碼雖然是一件比較痛苦的事情,但在這個(gè)過程中確實(shí)能學(xué)習(xí)到很多技巧,對(duì)個(gè)人的技能提升也是很有幫助,因?yàn)槎际切┠軌驅(qū)崒?shí)在在提高開發(fā)效率的干貨。

到此這篇關(guān)于Springboot 全局日期格式化處理的實(shí)現(xiàn)的文章就介紹到這了,更多相關(guān)Springboot 全局日期格式化內(nèi)容請(qǐng)搜索好吧啦網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持好吧啦網(wǎng)!

標(biāo)簽: Spring
相關(guān)文章:
主站蜘蛛池模板: 美女mm131爽爽爽免费视色 | 成人a在线观看 | 97在线观看免费视频 | 久久黄色毛片 | 国产成人高清在线观看播放 | 亚洲国产一区二区三区最新 | 国产欧美日韩中文久久 | 国产一区亚洲欧美成人 | 亚欧成人中文字幕一区 | 美女视频大全视频a免费九 美女视频大全网站免费 | 久久精品青草社区 | 亚洲国产精品久久卡一 | 最近日本免费观看视频 | 国产欧美日韩在线一区二区不卡 | 国产亚洲一区二区精品 | 国产成人精品亚洲一区 | 亚洲成a人片在线观看中 | 国产成人亚洲合集青青草原精品 | 9191精品国产免费不久久 | 亚洲综合资源 | 欧美成人手机视频 | 日本一级毛片在线看 | 欧美成人 一区二区三区 | 国产波多野结衣中文在线播放 | 中文字幕在亚洲第一在线 | 99国产精品免费观看视频 | 免费一级美国片在线观看 | 久久厕所 | 亚洲成人在线免费观看 | 国产欧美二区三区 | 欧美精品日本一级特黄 | 久久午夜网 | 国产精品伦理久久久久 | 国产最新网站 | 日本一级在线播放线观看视频 | 4四虎44虎www在线影院麻豆 | 国产精品亚洲第一区二区三区 | 69精品免费视频 | 真实国产乱人伦在线视频播放 | 成年女人毛片免费视频 | 色偷偷亚洲女人天堂观看欧 |