亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

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

 更新時(shí)間:2020年05月26日 11:04:44   作者:程序員內(nèi)點(diǎn)事  
這篇文章主要介紹了Springboot 全局日期格式化處理的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

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

有個(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)目簡單。不過,軍令在前,沒辦法硬著頭皮上吧!

第一個(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.Datejava.util.Calendar 不支持時(shí)區(qū),且非線程安全,對(duì)于日期的計(jì)算相對(duì)繁瑣,技術(shù)部一致要求用JDK1.8以后的 java.time LocalDateTime。但不少人還是在用 java.util.Datejava.util.Calendar 處理日期。

優(yōu)化方案

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

測試地址: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)用此種方式,簡單方便。

/**
 * @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;
  }
}

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

2、全局配置 (1)

Springboot 已經(jīng)為我們提供了日期格式化 ${spring.jackson.date-format:yyyy-MM-dd HH:mm:ss},這里我們需要進(jì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:
 */
@Configuration
public 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)?code>@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:
 */
@Configuration
public 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)目優(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)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Maven中的庫repository詳解

    Maven中的庫repository詳解

    Maven中要配置庫,可以有多種方式,最直接的是在項(xiàng)目中的pom.xml文件中,通過<repositories>配置庫,這樣配置的庫僅適用于當(dāng)前項(xiàng)目,這篇文章主要介紹了Maven中的庫(repository),需要的朋友可以參考下
    2024-01-01
  • SpringBoot實(shí)現(xiàn)OneDrive文件上傳的詳細(xì)步驟

    SpringBoot實(shí)現(xiàn)OneDrive文件上傳的詳細(xì)步驟

    這篇文章主要介紹了SpringBoot實(shí)現(xiàn)OneDrive文件上傳的詳細(xì)步驟,文中通過代碼示例和圖文講解的非常詳細(xì),對(duì)大家實(shí)現(xiàn)OneDrive文件上傳有一定的幫助,需要的朋友可以參考下
    2024-02-02
  • SpringMVC注解的入門實(shí)例詳解

    SpringMVC注解的入門實(shí)例詳解

    這篇文章主要為大家介紹了SpringMVC注解的入門實(shí)例,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-01-01
  • Java并發(fā)編程之Fork/Join框架詳解

    Java并發(fā)編程之Fork/Join框架詳解

    這篇文章主要介紹了Java并發(fā)編程之Fork/Join框架詳解,Fork/Join框架是Java7提供的一個(gè)用于并行執(zhí)行任務(wù)的框架,是一個(gè)把大任務(wù)分割成若干個(gè)小任務(wù),最終匯總每個(gè)小任務(wù)結(jié)果后得到大任務(wù)結(jié)果的框架,需要的朋友可以參考下
    2023-12-12
  • Springboot中的Controller解析

    Springboot中的Controller解析

    這篇文章主要介紹了Springboot中的Controller解析,Controller是SpringBoot的基本組件,也是MVC結(jié)構(gòu)的組成部分,其作用是將用戶提交來的請(qǐng)求通過URL匹配,分發(fā)給不同的接收器,該接收器會(huì)對(duì)其進(jìn)行相應(yīng)處理,然后返回處理結(jié)果,需要的朋友可以參考下
    2023-09-09
  • JAVA8獨(dú)有的map遍歷方式(非常好用)

    JAVA8獨(dú)有的map遍歷方式(非常好用)

    這篇文章主要介紹了JAVA8獨(dú)有的map遍歷方式(非常好用),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-12-12
  • java內(nèi)存優(yōu)化的方法總結(jié)

    java內(nèi)存優(yōu)化的方法總結(jié)

    在本篇文章里小編給大家分享的是一篇關(guān)于java內(nèi)存優(yōu)化的方法總結(jié)內(nèi)容,有需要的朋友們可以學(xué)習(xí)下。
    2021-06-06
  • SpringBoot整合Mybatis-Plus、Jwt實(shí)現(xiàn)登錄token設(shè)置

    SpringBoot整合Mybatis-Plus、Jwt實(shí)現(xiàn)登錄token設(shè)置

    Spring Boot整合Mybatis-plus實(shí)現(xiàn)登錄常常需要使用JWT來生成用戶的token并設(shè)置用戶權(quán)限的攔截器,本文就來詳細(xì)的介紹一下,具有一定的參考價(jià)值,感興趣的可以了解一下
    2024-02-02
  • springboot 如何使用jedis連接Redis數(shù)據(jù)庫

    springboot 如何使用jedis連接Redis數(shù)據(jù)庫

    這篇文章主要介紹了springboot 使用jedis連接Redis數(shù)據(jù)庫的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-07-07
  • 教你怎么用Java操作Redis

    教你怎么用Java操作Redis

    今天帶大家來學(xué)習(xí)怎么用Java操作Redis,文中有非常詳細(xì)的介紹,對(duì)正在學(xué)習(xí)java的小伙伴們有很好的幫助,建議有redis基礎(chǔ)并熟悉redis的基本數(shù)據(jù)類型命令的小伙伴學(xué)習(xí),需要的朋友可以參考下
    2021-05-05

最新評(píng)論