java 時間校驗(格式化)
背景:從數據庫獲取時間傳到前端進行展示的時候,我們有時候可能無法得到一個滿意的時間格式的時間日期,在數據庫中顯示的是正確的時間格式,獲取出來卻變成了很丑的時間戳,@JsonFormat注解很好的解決了這個問題,我們通過使用@JsonFormat可以很好的解決:后台到前台時間格式保持一致的問題,其次,另一個問題是,我們在使用WEB服務的時,可能會需要用到,傳入時間給后台,比如注冊新用戶需要填入出生日期等,這個時候前台傳遞給后台的時間格式同樣是不一致的,而我們的與之對應的便有了另一個注解,@DataTimeFormat便很好的解決了這個問題,接下來記錄一下具體的@JsonFormat與DateTimeFormat的使用過程。
后台到前台 屬性類型date
import com.fasterxml.jackson.annotation.JsonFormat;
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8")
前台到后台 屬性類型(date)string 直接sql存入
只能解析 url 拼接的字段 時間 對於json格式 RequestBody 不生效
@DateTimeFormat(pattern = "yyyy-MM-dd")
可以作用於 同一個豎向
如果使用get方法 瀏覽器默認會對空格進行轉義+ 導致轉換有問題
post
@RequestBody
一般都是使用@DateTimeFormat把 傳給后台的時間字符串轉成Date ,使用@JsonFormat 把后台傳出的Date轉成時間字符串 ,但是@DateTimeFormat只會在類似@RequestParam的請求參數(url拼接的參數才生效,如果是放到RequestBody中的form-data也是無效的)上生效,如果@DateTimeFormat放到@RequestBody下是無效的。
在@RequestBody中則可以使用@JsonFormat把傳給后台的時間字符串轉成Date,也就是說 @JsonFormat其實既可以把傳給后台的時間字符串轉成Date也可以把后台傳出的Date轉成時間字符串 。
前端傳字符串
所以直接 date類型
不要忘記@RequestBody
import com.fasterxml.jackson.annotation.JsonFormat;
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8")
可以在yml里邊統一配置
spring:
jackson:
#指定日期格式化時區,比如America/Los_Angeles或者GMT+10
time-zone: GMT+8
#日期格式化
date-format: yyyy-MM-dd HH:mm:ss
serialization:
#格式化輸出
indent_output: true
#忽略無法轉換的對象
fail_on_empty_beans: false
