springboot2 LocalDateTime類型未生效

項目背景:springboot 2.1.8release

application.properties配置:

spring.jackson.date-format=yyyy-MM-dd HH:mm:ss

postgres數據庫類型:create_time timestamp

實體類型:

@TableFiled
private LocalDateTime createTime;

查詢結果:

'createTime':''2020-04-14 19:58:55.764'

納尼?不應該是:‘createTime’:‘2020-04-14T19:58:55.764’?爲什麼?

spring.jackson.date-formate='yyyy-MM-dd HH:mm:ss'爲什麼沒生效呢???

查閱資料得知:

1·、jdk8的LocalDaeTime LocalDate LocalTime默認序列化和反序列化是toString(),而Date timestamp有各自的序列化和反序列化處理類。

2、spring.jackson.date-formate='yyyy-MM-dd HH:mm:ss'只針對於Date timestamp類型有效。

那麼怎麼解決這個問題呢?重寫jackson的關於LocalDateTime LocalTime LocalDate的序列化和反序列化的處理類。

具體的解決方案如下;

package com.skyeye.config;

import cn.hutool.core.date.DatePattern;
import com.fasterxml.jackson.datatype.jsr310.deser.LocalDateDeserializer;
import com.fasterxml.jackson.datatype.jsr310.deser.LocalDateTimeDeserializer;
import com.fasterxml.jackson.datatype.jsr310.deser.LocalTimeDeserializer;
import com.fasterxml.jackson.datatype.jsr310.ser.LocalDateSerializer;
import com.fasterxml.jackson.datatype.jsr310.ser.LocalDateTimeSerializer;
import com.fasterxml.jackson.datatype.jsr310.ser.LocalTimeSerializer;
import org.springframework.boot.autoconfigure.jackson.Jackson2ObjectMapperBuilderCustomizer;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary;

import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.LocalTime;
import java.time.format.DateTimeFormatter;

/**
 * format LocalDateTime LocalDate LocalTime
 *
 * @author Jiantao Li
 * @date 2020/4/15 11:04
 */
@Configuration
public class LocalDateFormatConfig {

    /**
     * Date格式化字符串
     */
    private static final String DATE_FORMAT = DatePattern.NORM_DATE_PATTERN;
    /**
     * DateTime格式化字符串
     */
    private static final String DATETIME_FORMAT = DatePattern.NORM_DATETIME_PATTERN;
    /**
     * Time格式化字符串
     */
    private static final String TIME_FORMAT = DatePattern.NORM_TIME_PATTERN;

    @Bean
    @Primary
    public Jackson2ObjectMapperBuilderCustomizer jackson2ObjectMapperBuilderCustomizer() {
        return builder -> builder.serializerByType(LocalDateTime.class, new LocalDateTimeSerializer(DateTimeFormatter.ofPattern(DATETIME_FORMAT)))
                .serializerByType(LocalDate.class, new LocalDateSerializer(DateTimeFormatter.ofPattern(DATE_FORMAT)))
                .serializerByType(LocalTime.class, new LocalTimeSerializer(DateTimeFormatter.ofPattern(TIME_FORMAT)))
                .deserializerByType(LocalDateTime.class, new LocalDateTimeDeserializer(DateTimeFormatter.ofPattern(DATETIME_FORMAT)))
                .deserializerByType(LocalDate.class, new LocalDateDeserializer(DateTimeFormatter.ofPattern(DATE_FORMAT)))
                .deserializerByType(LocalTime.class, new LocalTimeDeserializer(DateTimeFormatter.ofPattern(TIME_FORMAT)));
    }
}

重寫LocalDateTime LocalDate LocalTime的序列化和反序列化處理類。

項目中遇到的問題分享與大家。

本文完。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章