java8时间的序列化与反序列化
启动类调整
@SpringBootApplication
public class ElasticApplication {
@Autowired
private ObjectMapper objectMapper;
public static void main(String[] args) {
SpringApplication.run(ElasticApplication.class, args);
}
@PostConstruct
public void justifyTimeModule() {
objectMapper.registerModule(new JavaTimeModule());
}
}
重写spring的Formatter
package com.htring.demo.elastic.config;
import com.fasterxml.jackson.datatype.jsr310.deser.LocalTimeDeserializer;
import com.fasterxml.jackson.datatype.jsr310.ser.LocalTimeSerializer;
import org.springframework.boot.autoconfigure.jackson.Jackson2ObjectMapperBuilderCustomizer;
import org.springframework.format.Formatter;
import java.text.ParseException;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.LocalTime;
import java.time.format.DateTimeFormatter;
import java.util.Locale;
/**
* <p>Title: JacksonConfig</p>
* <p>Description: Jackson在springboot项目中是通过JacksonAutoConfiguration自动配置的,
* 我们需要在jackson自动配置之前把设置的java8的序列化器和反序列化器配置进去。</p>
*
* @author hu-ting
* @version v1.0.0
* @date 2020/12/8 14:05
*/
//@Configuration
//@ConditionalOnClass(ObjectMapper.class)
//@AutoConfigureBefore(JacksonAutoConfiguration.class)
public class JacksonConfig {
public static final String DEFAULT_DATE_TIME_FORMATTER = "yyyy-MM-dd HH:mm:ss";
public static final String DEFAULT_DATE_FORMATTER = "yyyy-MM-dd";
public static final String DEFAULT_TIME_FORMATTER = "HH:mm:ss";
// @Bean
public Jackson2ObjectMapperBuilderCustomizer myCustom() {
return builder -> builder
.deserializerByType(
LocalDateTime.class,
new LocalTimeDeserializer(DateTimeFormatter.ofPattern(DEFAULT_DATE_TIME_FORMATTER)))
.serializerByType(
LocalDateTime.class,
new LocalTimeSerializer(DateTimeFormatter.ofPattern(DEFAULT_DATE_TIME_FORMATTER)));
}
// @Bean
public Formatter<LocalDateTime> localDateTimeFormatter() {
return new Formatter<LocalDateTime>() {
@Override
public LocalDateTime parse(String text, Locale locale) throws ParseException {
return LocalDateTime.parse(text, DateTimeFormatter.ofPattern(DEFAULT_DATE_TIME_FORMATTER));
}
@Override
public String print(LocalDateTime object, Locale locale) {
return object.format(DateTimeFormatter.ofPattern(DEFAULT_DATE_TIME_FORMATTER));
}
};
}
// @Bean
public Formatter<LocalDate> localDateFormatter() {
return new Formatter<LocalDate>() {
@Override
public LocalDate parse(String text, Locale locale) throws ParseException {
return LocalDate.parse(text, DateTimeFormatter.ofPattern(DEFAULT_DATE_FORMATTER));
}
@Override
public String print(LocalDate object, Locale locale) {
return object.format(DateTimeFormatter.ofPattern(DEFAULT_DATE_FORMATTER));
}
};
}
// @Bean
public Formatter<LocalTime> localTimeFormatter() {
return new Formatter<LocalTime>() {
@Override
public LocalTime parse(String text, Locale locale) throws ParseException {
return LocalTime.parse(text, DateTimeFormatter.ofPattern(DEFAULT_TIME_FORMATTER));
}
@Override
public String print(LocalTime object, Locale locale) {
return object.format(DateTimeFormatter.ofPattern(DEFAULT_TIME_FORMATTER));
}
};
}
}