(我在UTC + 2時區,我認爲是2小時的差異)。傑克遜序列化有時與時區borking
我正忙於編寫一個JSON RESTful API,它是Grails應用程序的一部分(特別是2.0.3在此項目中,但在其他版本中會發生此問題)。我用傑克遜的序列化和JSON反序列化,以及JsonService的配置是這樣的:http://pastebin.com/JacytMuF
那麼多域對象都整理,並在一個單一的DTO(在這種情況下,它是一個簡單的地圖)爲代表的價值觀,而這些都只是傳遞給JsonService以轉換爲Json,該Json返回(請求)。所有的字段都被正確地序列化,除了兩個(幾個)日期之外,這兩個日期都關閉了2個小時。我可以運行的例子:
db_dev=# select next_billing_date from account where code = 'CATS001';
next_billing_date
---------------------
2013-06-20 00:00:00
,這是由這個小小的動作
def checkTimezone() {
Account acc = Account.findByCode("CATS001")
log.error(acc.nextBillingDate)
}
預期返回
ERROR mash.TestController - 2013-06-20 00:00:00.0
證實是正確的(內存中)。此外,我可以檢查任何與內存值篡改通過這樣做,在RestAccountController內:
def show() {
...
def ans = [ code: ac.code, nextBillingDate: ac.nextBillingDate ]
log.error("CATTTTSSSSSSSSSSSSSS::::: ${ac.nextBillingDate}")
[ans: ans]
}
(返回)
ERROR mash.RestAccountController - CATTTTSSSSSSSSSSSSSS::::: 2013-06-20 00:00:00.0
然而,當我打的相關終點,我得到:
nextBillingDate": "2013-06-19T22:00:00.000+0000"
哪個2小時關閉。該nextBillingDate屬性是一個普通的Java Date對象,基礎數據庫是PSQL:
next_billing_date | timestamp without time zone | not null | plain |
,所以我有點失去了爲什麼它的隨機扣除2小時想法。我能看到爲什麼2個小時的幻數(時區差異),但我無法解釋爲什麼它(僅適用於日期對象的某個子集或確實)抵消一些對象的日期。
看看這個,如果它是任何靈感的來源:[http://stackoverflow.com/questions/15734768/jqgrid-date-formatter-not-applying-local-time-offset-correctly-grails] (http://stackoverflow.com/questions/15734768/jqgrid-date-formatter-not-applying-local-time-offset-correctly-grails) – lucke84
我建議你使用你在''SimpleDateFormat''中聲明的'SimpleDateFormat''', JsonService'來打印你的調試。 –