参考链接出处
https://blog.youkuaiyun.com/qq_42937522/article/details/110310826
修改后的代码(包括引用的出处)
import cn.hutool.core.date.DatePattern;
import cn.hutool.core.date.LocalDateTimeUtil;
import cn.hutool.core.util.StrUtil;
import com.fasterxml.jackson.core.JsonGenerator;
import com.fasterxml.jackson.core.JsonParser;
import com.fasterxml.jackson.databind.DeserializationContext;
import com.fasterxml.jackson.databind.JsonDeserializer;
import com.fasterxml.jackson.databind.JsonSerializer;
import com.fasterxml.jackson.databind.SerializerProvider;
import org.springframework.boot.autoconfigure.jackson.Jackson2ObjectMapperBuilderCustomizer;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.convert.converter.Converter;
import java.io.IOException;
import java.time.LocalDateTime;
/**
* @author hanfeng
* @date 2021/11/9
*/
/**
* jackson全局配置java8 LocalDateTime的序列化 全局配置时间返回格式
*/
@Configuration
public class JacksonCustomizerConfig {
/**
* description:适配自定义序列化和反序列化策略
*/
@Bean
public Jackson2ObjectMapperBuilderCustomizer jackson2ObjectMapperBuilderCustomizer() {
return builder -> {
builder.serializerByType(LocalDateTime.class, new LocalDateTimeSerializer());
builder.deserializerByType(LocalDateTime.class, new LocalDateTimeDeserializer());
};
}
/**
* description:序列化
* LocalDateTime序列化为yyyy-MM-dd HH:mm:ss
*/
public static class LocalDateTimeSerializer extends JsonSerializer<LocalDateTime> {
@Override
public void serialize(LocalDateTime value, JsonGenerator gen, SerializerProvider serializers)
throws IOException {
if (value != null) {
String timestamp = LocalDateTimeUtil.format(value, DatePattern.NORM_DATETIME_PATTERN);
gen.writeNumber(timestamp);
}
}
}
/**
* description:反序列化
* 解析ISO时间序列化为LocalDateTime
*/
public static class LocalDateTimeDeserializer extends JsonDeserializer<LocalDateTime> {
@Override
public LocalDateTime deserialize(JsonParser p, DeserializationContext deserializationContext)
throws IOException {
String timestamp = p.getValueAsString();
if (StrUtil.isNotEmpty(timestamp)) {
return LocalDateTimeUtil.parse(timestamp);
} else {
return null;
}
}
}
/**
* description:LocalDateTime转换器,用于转换RequestParam和PathVariable参数
* 接收解析ISO时间——>LocalDateTime
*/
@Bean
public Converter<String, LocalDateTime> localDateTimeConverter() {
return new Converter<String, LocalDateTime>() {
@Override
public LocalDateTime convert(String source) {
//毫秒级时间戳转LocalDateTime
return LocalDateTimeUtil.parse(source);
}
};
}
}