新型时间类是我们需要不断追赶的Java8潮流,如果不做处理,序列化的结果是这样的:
我们统一做一下处理:
@Configuration
public class LocalDateSerializerConfig {
private final String PATTERN = "yyyy/MM/dd HH:mm:ss";
@Bean
public LocalDateTimeSerializer localDateTimeDeserializer() {
return new LocalDateTimeSerializer(DateTimeFormatter.ofPattern(PATTERN));
}
@Bean
public Jackson2ObjectMapperBuilderCustomizer jackson2ObjectMapperBuilderCustomizer() {
return new Jackson2ObjectMapperBuilderCustomizer() {
@Override
public void customize(Jackson2ObjectMapperBuilder jacksonObjectMapperBuilder) {
jacksonObjectMapperBuilder.serializerByType(LocalDateTime.class, localDateTimeDeserializer());
}
};
// equals to following code:
// return builder -> builder.serializerByType(LocalDateTime.class, localDateTimeDeserializer());
}
}
此时,达到了我们想要的序列化结果:
但是我们发现LocalDate还是不行:
如法炮制即可:
@Configuration
public class LocalDateSerializerConfig {
private static final String LOCAL_DATE_PATTERN = "yyyy/MM/dd";
private static final String LOCAL_TIME_PATTERN = "HH:mm:ss";
private static final String LOCAL_DATETIME_PATTERN = "yyyy/MM/dd HH:mm:ss";
@Bean
public LocalDateSerializer localDateSerializer() {
return new LocalDateSerializer(DateTimeFormatter.ofPattern(LOCAL_DATE_PATTERN));
}
@Bean
public LocalDateDeserializer localDateDeserializer() {
return new LocalDateDeserializer(DateTimeFormatter.ofPattern(LOCAL_DATE_PATTERN));
}
@Bean
public LocalTimeSerializer localTimeSerializer() {
return new LocalTimeSerializer(DateTimeFormatter.ofPattern(LOCAL_TIME_PATTERN));
}
@Bean
public LocalTimeDeserializer localTimeDeserializer() {
return new LocalTimeDeserializer(DateTimeFormatter.ofPattern(LOCAL_TIME_PATTERN));
}
@Bean
public LocalDateTimeSerializer localDateTimeSerializer() {
return new LocalDateTimeSerializer(DateTimeFormatter.ofPattern(LOCAL_DATETIME_PATTERN));
}
@Bean
public LocalDateTimeDeserializer localDateTimeDeserializer() {
return new LocalDateTimeDeserializer(DateTimeFormatter.ofPattern(LOCAL_DATETIME_PATTERN));
}
@Bean
public Jackson2ObjectMapperBuilderCustomizer jackson2ObjectMapperBuilderCustomizer() {
return new Jackson2ObjectMapperBuilderCustomizer() {
@Override
public void customize(Jackson2ObjectMapperBuilder jacksonObjectMapperBuilder) {
jacksonObjectMapperBuilder.serializerByType(LocalDate.class, localDateSerializer());
jacksonObjectMapperBuilder.serializerByType(LocalTime.class, localTimeSerializer());
jacksonObjectMapperBuilder.serializerByType(LocalDateTime.class, localDateTimeSerializer());
jacksonObjectMapperBuilder.deserializerByType(LocalDate.class, localDateDeserializer());
jacksonObjectMapperBuilder.deserializerByType(LocalTime.class, localTimeDeserializer());
jacksonObjectMapperBuilder.deserializerByType(LocalDateTime.class, localDateTimeDeserializer());
}
};
// equals to following code:
// return builder -> builder.serializerByType(LocalDate.class, localDateSerializer())
// .serializerByType(LocalTime.class, localTimeSerializer())
// .serializerByType(LocalDateTime.class, localDateTimeSerializer())
// .deserializerByType(LocalDate.class, localDateDeserializer())
// .deserializerByType(LocalTime.class, localTimeDeserializer())
// .deserializerByType(LocalDateTime.class, localDateTimeDeserializer());
}
}
现在显示正常了:
注意:此法仅限于Json的序列化与反序列化。