Springboot2 jackson2 LocalDateTime LocalDate DateTime 日期格式化處理
原由:使用Mybatis plus 代碼生成器 逆向生產(chǎn)的代碼 日期格式 默認(rèn)生成為L(zhǎng)ocalDateTime?樊诺,實(shí)體里面共有三個(gè)字段為L(zhǎng)ocalDateTime ,數(shù)據(jù)庫(kù)中 其中兩字段都有數(shù)據(jù)挡爵,一個(gè)字段沒有初始化的日期,使用@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+08")??字段沒有初始化的日期? 數(shù)據(jù)格式成為了 yyyy-MM-ddTHH:mm:ss
import com.fasterxml.jackson.core.JsonGenerator;
import com.fasterxml.jackson.core.JsonParser;
import com.fasterxml.jackson.databind.*;
import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule;
import org.apache.commons.lang3.StringUtils;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary;
import org.springframework.core.convert.converter.Converter;
import org.springframework.lang.NonNull;
import java.io.IOException;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.LocalTime;
import java.time.format.DateTimeFormatter;
import java.util.TimeZone;
/**
* jackson2 日期序列化和反序列化處理
*
* @author zhaoyang10
* @create 2018/11/27
*/
@Configuration
public class DateConverterConfig {
? ? private static final DateTimeFormatter DATETIME_FORMATTER = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
? ? private static final DateTimeFormatter DATE_FORMATTER = DateTimeFormatter.ofPattern("yyyy-MM-dd");
? ? private static final DateTimeFormatter TIME_FORMATTER = DateTimeFormatter.ofPattern("HH:mm:ss");
? ? /**
? ? * jackson2 json序列化 null字段輸出為空串
? ? *
? ? * @return
? ? * @author zhaoyang10
? ? */
? ? @Bean
? ? @Primary
? ? //@ConditionalOnMissingBean(ObjectMapper.class)
? ? public ObjectMapper serializingObjectMapper() {
? ? ? ? ObjectMapper objectMapper = new ObjectMapper();
? ? ? ? JavaTimeModule javaTimeModule = new JavaTimeModule();
? ? ? ? //序列化日期格式
? ? ? ? javaTimeModule.addSerializer(LocalDateTime.class, new LocalDateTimeSerializer());
? ? ? ? javaTimeModule.addSerializer(LocalDate.class, new LocalDateSerializer());
? ? ? ? javaTimeModule.addSerializer(LocalTime.class, new LocalTimeSerializer());
? ? ? ? //反序列化日期格式
? ? ? ? javaTimeModule.addDeserializer(LocalDateTime.class, new LocalDateTimeDeserializer());
? ? ? ? javaTimeModule.addDeserializer(LocalDate.class, new LocalDateDeserializer());
? ? ? ? javaTimeModule.addDeserializer(LocalTime.class, new LocalTimeDeserializer());
? ? ? ? objectMapper.registerModule(javaTimeModule);
objectMapper.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS);
objectMapper.disable(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES);
? ? ? ? objectMapper.setTimeZone(TimeZone.getTimeZone("Asia/Shanghai"));
? ? ? ? return objectMapper;
? ? }
? ? /**
? ? * 日期序列化
? ? */
? ? public class LocalDateTimeSerializer extends JsonSerializer<LocalDateTime> {
? ? ? ? @Override
? ? ? ? public void serialize(LocalDateTime value, JsonGenerator gen, SerializerProvider serializers) throws IOException {
? ? ? ? ? ? gen.writeString(value.format(DATETIME_FORMATTER));
? ? ? ? }
? ? }
? ? /**
? ? * 日期反序列化
? ? */
? ? public class LocalDateTimeDeserializer extends JsonDeserializer<LocalDateTime> {
? ? ? ? @Override
? ? ? ? public LocalDateTime deserialize(JsonParser p, DeserializationContext ctxt) throws IOException {
? ? ? ? ? ? return LocalDateTime.parse(p.getValueAsString(), DATETIME_FORMATTER);
? ? ? ? }
? ? }
? ? /**
? ? * 日期序列化
? ? */
? ? public class LocalDateSerializer extends JsonSerializer<LocalDate> {
? ? ? ? @Override
? ? ? ? public void serialize(LocalDate value, JsonGenerator gen, SerializerProvider serializers) throws IOException {
? ? ? ? ? ? gen.writeString(value.format(DATE_FORMATTER));
? ? ? ? }
? ? }
? ? /**
? ? * 日期反序列化
? ? */
? ? public class LocalDateDeserializer extends JsonDeserializer<LocalDate> {
? ? ? ? @Override
? ? ? ? public LocalDate deserialize(JsonParser p, DeserializationContext ctxt) throws IOException {
? ? ? ? ? ? return LocalDate.parse(p.getValueAsString(), DATE_FORMATTER);
? ? ? ? }
? ? }
? ? /**
? ? * 日期序列化
? ? */
? ? public class LocalTimeSerializer extends JsonSerializer<LocalTime> {
? ? ? ? @Override
? ? ? ? public void serialize(LocalTime value, JsonGenerator gen, SerializerProvider serializers) throws IOException {
? ? ? ? ? ? gen.writeString(value.format(TIME_FORMATTER));
? ? ? ? }
? ? }
? ? /**
? ? * 日期反序列化
? ? */
? ? public class LocalTimeDeserializer extends JsonDeserializer<LocalTime> {
? ? ? ? @Override
? ? ? ? public LocalTime deserialize(JsonParser p, DeserializationContext ctxt) throws IOException {
? ? ? ? ? ? return LocalTime.parse(p.getValueAsString(), TIME_FORMATTER);
? ? ? ? }
? ? }
? ? /**
? ? * 接收前端入?yún)⑷掌诘霓D(zhuǎn)換處理
? ? *
? ? * @return
? ? */
? ? @Bean
? ? public Converter<String, LocalDateTime> LocalDateTimeConvert() {
? ? ? ? return new Converter<String, LocalDateTime>() {
? ? ? ? ? ? @Override
? ? ? ? ? ? public LocalDateTime convert(@NonNull String source) {
? ? ? ? ? ? ? ? LocalDateTime date = null;
? ? ? ? ? ? ? ? if (StringUtils.isNotBlank(source)) {
? ? ? ? ? ? ? ? ? ? date = LocalDateTime.parse(source, DATETIME_FORMATTER);
? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? return date;
? ? ? ? ? ? }
? ? ? ? };
? ? }
? ? @Bean
? ? public Converter<String, LocalDate> LocalDateConvert() {
? ? ? ? return new Converter<String, LocalDate>() {
? ? ? ? ? ? @Override
? ? ? ? ? ? public LocalDate convert(@NonNull String source) {
? ? ? ? ? ? ? ? LocalDate date = null;
? ? ? ? ? ? ? ? if (StringUtils.isNotBlank(source)) {
? ? ? ? ? ? ? ? ? ? date = LocalDate.parse(source, DATE_FORMATTER);
? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? return date;
? ? ? ? ? ? }
? ? ? ? };
? ? }
? ? @Bean
? ? public Converter<String, LocalTime> LocalTimeConvert() {
? ? ? ? return new Converter<String, LocalTime>() {
? ? ? ? ? ? @Override
? ? ? ? ? ? public LocalTime convert(@NonNull String source) {
? ? ? ? ? ? ? ? LocalTime time = null;
? ? ? ? ? ? ? ? if (StringUtils.isNotBlank(source)) {
? ? ? ? ? ? ? ? ? ? time = LocalTime.parse(source, TIME_FORMATTER);
? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? return time;
? ? ? ? ? ? }
? ? ? ? };
? ? }
}