针对LocalDateTime日期格式化解决方案


前两天做项目,后端返回给前端的数据中日期时间格式如下:

并不是我想要的yyyy-MM-dd HH:mm:ss格式的,所以网上搜了一下有一个JSON日期LocalDateTime序列化器(如果是Date类型,有其他方式解决),我们只需要在配置类中加入此配置即可

先导包

 

	com.fasterxml.jackson.core
	jackson-databind


	com.fasterxml.jackson.datatype
	jackson-datatype-jsr310




	com.alibaba
	fastjson
	1.2.28


	org.json
	json
	20170516


配置类

package com.qbb.srb.base.config;

import com.fasterxml.jackson.datatype.jsr310.ser.LocalDateTimeSerializer;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.autoconfigure.jackson.Jackson2ObjectMapperBuilderCustomizer;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

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

/**
 * @author QiuQiu&LL (个人博客:https://www.cnblogs.com/qbbit)
 * @version 1.0
 * @date 2022-04-05  17:39
 * @Description:
 */
@Configuration
public class LocalDateTimeSerializerConfig {
    @Value("${spring.jackson.date-format:yyyy-MM-dd HH:mm:ss}")
    private String pattern;

    public LocalDateTimeSerializer localDateTimeDeserializer() {
        return new LocalDateTimeSerializer(DateTimeFormatter.ofPattern(pattern));
    }

    @Bean
    public Jackson2ObjectMapperBuilderCustomizer jackson2ObjectMapperBuilderCustomizer() {
        return builder -> builder.serializerByType(LocalDateTime.class, localDateTimeDeserializer());
    }
}

测试一下:

可以发现上面的是好使的,但是问题来了,上面配置类形式的相当于全局设置,只要是LocalDateTime都是以这种格式展示了,那我现在想带点个性化,比如我只要年月日怎么办:yyyy-MM-dd?好办

我们只需要在相应的实体类上加入注解即可,例如:

@ApiModelProperty(value = "创建时间")
@JsonFormat(pattern = "yyyy-MM-dd")
// @DateTimeFormat(pattern = "yyyy-MM-dd")
private LocalDateTime createTime;

注意:这里的@DateTimeFormat控制的是前端传递过来的日期格式数据我们使用什么格式来序列化,而@JsonFormat则是以什么格式序列化传递给前端!! 一个对内,一个对外