JsonFormat時間解析不準確問題
今天遇到一個比較奇葩的問題。
我請求報文的時間是字串"2018-06-25 17:57:54"
到了controller用@RequestBody解析後時間變成了Mon Jun 25 00:00:00 CST 2018
時分秒被狗吃了!
而我的JsonFormat也指定了時分秒,按理說不會出現這樣的問題。
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", locale = "zh", timezone = "GMT+8")
於是我開始debug。
斷點到:
org.springframework.web.servlet.mvc.method.annotation。AbstractMessageConverterMethodArgumentResolver.readWithMessageConverters.196行時,
發現轉換器genericConverter的實現類是:
org.springframework.http.converter.json.MappingJackson2HttpMessageConverter
確實是jackson解析的,所以用JsonFormat應該沒問題。
在com.fasterxml.jackson.core.json.ByteSourceJsonBootstrapper.ensureLoaded方法開始讀取請求的body到_inputBuffer陣列。
檢視這時讀取的請求報文,時間也是正常的,帶時分秒
繼續深入,發現罪魁禍首:
JavaDateJsonDeserializer是啥玩意,公司自己的component元件帶的,把原生的Deserializer替換了
deserializers.put(java.util.Date.class, new JavaDateJsonDeserializer());
不掃描這個初始化類,解決。
excludeFilters = {@ComponentScan.Filter(type= FilterType.ASSIGNABLE_TYPE,value = RequestParamConfig.class)}
然後就會用jackson原生的com.fasterxml.jackson.databind.deser.std.DateDeserializers解析了: