首先第一點需要知道的是springboot默認依賴的json框架是jackson。當使用@ResponseBody註解返回json格式數據時就是該框架在起作用。
如果字段屬性是Date而非LocalDateTime時,通常我們會在application.properties裏面配置如下:
spring.mvc.date-format=yyyy-MM-dd HH:mm:ss
spring.jackson.date-format=yyyy-MM-dd HH:mm:ss
spring.jackson.time-zone=GMT+8
spring.jackson.serialization.write-dates-as-timestamps=false
如下圖所示,spring.jackson開頭的配置會被JacksonProperties類獲取進行使用。當返回json格式的時候,Jackson就會根據配置文件中日期格式化的配置對結果進行處理。
但是如果字段屬性爲LocalDateTime呢?這種配置就失去了作用。
這時候建議配置如下:
/**
* Created by jianggc at 2020/7/1.
*/
@Configuration
public class LocalDateTimeSerializerConfig {
@Value("${spring.jackson.date-format:yyyy-MM-dd HH:mm:ss}")
private String pattern;
// localDateTime 序列化器
@Bean
public LocalDateTimeSerializer localDateTimeSerializer() {
return new LocalDateTimeSerializer(DateTimeFormatter.ofPattern(pattern));
}
@Bean
public Jackson2ObjectMapperBuilderCustomizer jackson2ObjectMapperBuilderCustomizer() {
return builder -> builder.serializerByType(LocalDateTime.class, localDateTimeSerializer());
}
}
這種配置方式自然是全局的,如果想針對某個字段特殊處理,可以在類字段上面添加註解@JsonFormat:
@JsonFormat(pattern="yyyy-MM-dd")
private LocalDateTime createTime;