package com.jilongda.common.config; import com.fasterxml.jackson.core.JsonGenerator; import com.fasterxml.jackson.core.JsonParser; import com.fasterxml.jackson.databind.DeserializationContext; import com.fasterxml.jackson.databind.SerializerProvider; import com.fasterxml.jackson.databind.deser.std.DateDeserializers; import com.fasterxml.jackson.databind.ser.std.DateSerializer; import com.fasterxml.jackson.databind.ser.std.ToStringSerializer; import com.fasterxml.jackson.datatype.jsr310.deser.LocalDateDeserializer; import com.fasterxml.jackson.datatype.jsr310.deser.LocalDateTimeDeserializer; import com.fasterxml.jackson.datatype.jsr310.ser.LocalDateSerializer; import com.fasterxml.jackson.datatype.jsr310.ser.LocalDateTimeSerializer; import org.springframework.boot.autoconfigure.jackson.Jackson2ObjectMapperBuilderCustomizer; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.util.StringUtils; import java.io.IOException; import java.text.ParseException; import java.text.SimpleDateFormat; import java.time.format.DateTimeFormatter; import java.util.Date; import java.util.Objects; /** * @author xiaochen * @ClassName LocalDateTimeSerializerConfig * @Description * @date 2020-09-22 11:22 */ @Configuration public class JacksonConfig { public static final String dateFormat = "yyyy-MM-dd"; public static final String dateTimeFormat = "yyyy-MM-dd HH:mm:ss"; @Bean public Jackson2ObjectMapperBuilderCustomizer jsonCustomizer() { return builder -> { // Long型精度丢失问题 builder.serializerByType(Long.TYPE, ToStringSerializer.instance); builder.serializerByType(Long.class, ToStringSerializer.instance); // 时间格式化 builder.simpleDateFormat(dateTimeFormat); builder.serializers(new LocalDateSerializer(DateTimeFormatter.ofPattern(dateFormat))); builder.serializers(new LocalDateTimeSerializer(DateTimeFormatter.ofPattern(dateTimeFormat))); // builder.serializers(new CustomDateSerializer()); //builder.deserializers(new CustomDateDeSerializer()); builder.deserializers(new LocalDateDeserializer(DateTimeFormatter.ofPattern(dateFormat))); builder.deserializers(new LocalDateTimeDeserializer(DateTimeFormatter.ofPattern(dateTimeFormat))); }; } static class CustomDateDeSerializer extends DateDeserializers.DateDeserializer { SimpleDateFormat format = new SimpleDateFormat(dateTimeFormat); @Override public Date deserialize(JsonParser p, DeserializationContext ctxt) throws IOException { if (p != null) { String time = p.getText(); if (StringUtils.hasLength(time)) { try { return format.parse(time); } catch (ParseException e) { return null; } } } return super.deserialize(p, ctxt); } } class CustomDateSerializer extends DateSerializer { @Override public void serialize(Date value, JsonGenerator jgen, SerializerProvider provider) throws IOException { if (Objects.nonNull(value)) { SimpleDateFormat format = new SimpleDateFormat(dateTimeFormat); jgen.writeString(format.format(value)); } } } }