package com.hollywood.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));
|
}
|
}
|
}
|
}
|