Jackson無法將LocalDateTime序列化成字符串的解決辦法


1.情景展示

  在web開發過程中,如果使用的是SpringBoot框架的話, 我們通常使用在前后端數據交互的時候,我們通常會涉及到日期類型的轉換。

  當我們需要將日期類型轉換成字符串響應給前端時,只需要一個注解@JsonFormat就可以搞定

  這樣,前端接收到的將是2021-03-17 16:51:51格式的日期格式字符串,根本無需我們手動將日期轉字符串。

  使用@JsonFormat,進行手動序列化時,會不會出問題呢?

2.原因分析

  前后端交互,使用@JsonFormat可以解決日期問題,但是,在實際開發過程中,往往我們服務器對服務器,這樣一來@JsonFormat就失效了。

  下面,我們來測試一下吧:

  即:它只能使用於前后端交互,具體原理我不清楚。

3.解決方案

  既然@JsonFormat不能用,那我們只能另想辦法了

  通過修改ObjectMapper日期序列化格式來實現

  導包

<!--日期類進行序列化時,指定格式-->
<dependency>
    <groupId>com.fasterxml.jackson.datatype</groupId>
    <artifactId>jackson-datatype-jsr310</artifactId>
    <version>2.11.3</version>
</dependency>

  代碼實現

import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule;
import com.fasterxml.jackson.datatype.jsr310.ser.LocalDateTimeSerializer;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;  
/*
 * 將包含LocalDateTime類型的屬性進行序列化時轉成時間字符串
 * @description: 通過Jackson實現
 * @attention: 如果自定義key名稱的話,通過添加注解@JsonProperty來實現
 * @date: 2021-03-17 15:42
 * @param: bean
 * @return: java.lang.String json字符串
 * 生成的日期格式:yyyy-MM-dd HH:mm:ss
 */
public static String fromBeanWithLocalDateTime(Object bean) {
    if (null == bean) return "";

    String jsonStr = "";
    try {
        ObjectMapper mapper = new ObjectMapper();
        // 初始化JavaTimeModule
        JavaTimeModule timeModule = new JavaTimeModule();
        // 設置LocalDateTime的序列化格式
        DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
        timeModule.addSerializer(LocalDateTime.class, new LocalDateTimeSerializer(dateTimeFormatter));
        mapper.registerModule(timeModule);
        jsonStr = mapper.writeValueAsString(bean);
    } catch (JsonProcessingException e) {
        log.error("JavaBean-->json字符串轉換失敗:" + e.getMessage());
        return "";
    }

    log.debug("JavaBean轉json字符串前:\n" + bean.toString());
    log.debug("JavaBean轉json字符串后:\n" + jsonStr);
    return jsonStr;
}

  效果展示:

 

   

寫在最后

  哪位大佬如若發現文章存在紕漏之處或需要補充更多內容,歡迎留言!!!

 相關推薦:

 


免責聲明!

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



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