【jackson序列化工具】全局格式化时间yyyy-MM-dd HH:mm:ss、反序列化枚举
一、格式化时间
格式化时间,也就是序列化时间,返回给前端展示的时间,一共有三种实现方式。
先看第一种:
1.1 yml配置
如果是springboot项目,则可以使用yml全局配置,简单粗暴
spring:
jackson:
date-format: yyyy-MM-dd HH:mm:ss
time-zone: GMT+08
1.2 注解
第二种则是注解的方式,需要注意的是在每个需要序列化的类的时间字段上都要添加该注解,当然可以添加一个基类,让其它类继承这类就好了。
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") //前台传入日期时间时定义时间存储的格式
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") // 序列化时格式化时间
@JsonDeserialize(using = LocalDateTimeDeserializer.class)
@JsonSerialize(using = LocalDateTimeSerializer.class)
private LocalDateTime createTime;
1.3配置类的方式
请看代码
package com.example.start.conf;
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 com.mimirii.smartgreenhouse.utils.Constants;
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;
import java.util.Locale;
/**
* @description:
* @author: luke on 2023/10/24
* @version: 1.0
*/
@Configuration
public class LocalDateFormatConfig {
/**
* Date格式化字符串
*/
private static final String DATE_FORMAT = DatePattern.NORM_DATE_PATTERN; //yyyy-MM-dd
/**
* DateTime格式化字符串
*/
private static final String DATETIME_FORMAT = DatePattern.NORM_DATETIME_PATTERN; //yyyy-MM-dd HH:mm:ss
/**
* Time格式化字符串
*/
private static final String TIME_FORMAT = "HH:mm"; //HH:mm
@Bean
@Primary
public Jackson2ObjectMapperBuilderCustomizer jackson2ObjectMapperBuilderCustomizer() {
return builder -> builder.serializerByType(LocalDateTime.class, new LocalDateTimeSerializer(DateTimeFormatter.ofPattern(DATETIME_FORMAT, Locale.CHINA)))
.serializerByType(LocalDate.class, new LocalDateSerializer(DateTimeFormatter.ofPattern(DATE_FORMAT, Locale.CHINA)))
.serializerByType(LocalTime.class, new LocalTimeSerializer(DateTimeFormatter.ofPattern(TIME_FORMAT, Locale.CHINA)))
.deserializerByType(LocalDateTime.class, new LocalDateTimeDeserializer(DateTimeFormatter.ofPattern(DATETIME_FORMAT, Locale.CHINA)))
.deserializerByType(LocalDate.class, new LocalDateDeserializer(DateTimeFormatter.ofPattern(DATE_FORMAT, Locale.CHINA)))
.deserializerByType(LocalTime.class, new LocalTimeDeserializer(DateTimeFormatter.ofPattern(TIME_FORMAT, Locale.CHINA)));
}
}
至此,三种序列化时间和反序列化时间的方法已经完成。