Java日期轉換註解配置date format時間失效
引言
今天生產上突然出現瞭列表日期錯誤,與數據庫實際差瞭8個小時;
這下可尷尬瞭,之前迭代都是正常,肯定是那裡出幺蛾子瞭,一頓排除,原來是新添加攔截器繼承WebMvcConfigurationSupport導致date-format時間格式失效瞭。
順帶學習瞭一下@JsonFormat和@DateTimeFormat的用法:
註解@JsonFormat主要是後臺到前臺的時間格式的轉換
註解@DateTimeFormat主要是前後到後臺的時間格式的轉換
一、@DateTimeFormat
主要解決前端時間控件傳值到後臺接收準確的Date類屬性的問題,我們可以在需要接收的類中對應的時間類型屬性上加上@DateTimeFormat註解,並在註解中加上pattern屬性。
// 出生年月日 @DateTimeFormat(pattern = "yyyy-MM-dd HH-mm-ss") private Date birthday;
二、@JsonFormat
該註解主要解決後臺從數據庫中取出時間類型賦予java對象的Date屬性值無法在前端以一定的日期格式來呈現,默認返回的是一個帶時區的格式串,不符合我們日常要呈現的yyyy-MM-dd格式的日期。 同樣,我們在對應的接收對象時間類型上加上@JsonFormat註解,並在註解中加上pattern屬性以及timezone屬性,例如:
// 出生年月日 @JsonFormat(locale="zh", timezone="GMT+8", pattern="yyyy-MM-dd HH:mm:ss") @DateTimeFormat(pattern = "yyyy-MM-dd") private Date birthday;
pattern:是你需要轉換的時間日期的格式
timezone:是時間設置為東八區,避免時間在轉換中有誤差;GMT+8表示我們以東八區時區為準。
三、application.yml文件配置
1、數據庫配置時區serverTimezone=Asia/Shanghai或者serverTimezone=GMT%2B8
解決mysql從數據庫查詢的時間與實際時間相差8小時:
spring.datasource.url=jdbc:mysql://10.35.105.25:3306/database?characterEncoding=utf-8&serverTimezone=GMT%2B8
2、配置spring.jackson
spring.jackson.date-format=yyyy-MM-dd HH:mm:ss spring.jackson.time-zone=GMT+8
spring: jackson: time-zone: GMT+8 date-format: yyyy-MM-dd HH:mm:ss
四、SpringBoot攔截器
SpringBoot攔截器SpringBoot攔截器繼承WebMvcConfigurationSupport導致date-format時間格式失效
1、解決辦法不繼承WebMvcConfigurationSupport,修改為實現WebMvcConfigurer接口
@Configuration public class WebConfig implements WebMvcConfigurer { @Resource private JwtInterceptor jwtInterceptor; @Override public void addInterceptors(InterceptorRegistry registry) { registry.addInterceptor(jwtInterceptor) //攔截所有url .addPathPatterns("/**") //排除登錄url .excludePathPatterns("/", "/login"); } }
2、另外還有方式就是引入fastjson替換jackson
3、也可以繼承WebMvcConfigurationSupport重寫configureMessageConverters,自定義轉換器處理日期類型轉換
@Override public void configureMessageConverters(List<HttpMessageConverter<?>> converters) { Jackson2ObjectMapperBuilder builder = new Jackson2ObjectMapperBuilder() .dateFormat(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss")) .serializationInclusion(com.fasterxml.jackson.annotation.JsonInclude.Include.NON_NULL); converters.add(new StringHttpMessageConverter(StandardCharsets.UTF_8)); converters.add(new MappingJackson2HttpMessageConverter(builder.build())); }
以上就是Java日期轉換註解配置date format時間失效的詳細內容,更多關於Java日期轉換註解配置的資料請關註WalkonNet其它相關文章!
推薦閱讀:
- java日期時間格式化@JsonFormat與@DateTimeFormat的使用
- Java前後端時間格式的轉化方式
- springboot前端傳參date類型後臺處理的方式
- 使用mybatis格式化查詢出的日期
- java中的實體類時間格式化