Json 杰克逊有时会与时区发生冲突
(我在UTC+2时区,我假设是2小时的时差) 我正忙于编写一个JSON RESTful API,它是Grails应用程序的一部分(特别是在本项目中为2.0.3版本,但这个问题在其他版本中也会出现)。我使用Jackson对Json进行序列化和反序列化,JsonService的配置如下所示: 因此,多个域对象的值在单个DTO中进行了整理和表示(在本例中,它是一个简单的映射),这些值只是传递给JsonService以转换为Json,然后返回(请求)。所有字段都已正确序列化,但有两个(多个)日期除外,它们已关闭2小时。例如,我可以运行:Json 杰克逊有时会与时区发生冲突,json,grails,jackson,Json,Grails,Jackson,(我在UTC+2时区,我假设是2小时的时差) 我正忙于编写一个JSON RESTful API,它是Grails应用程序的一部分(特别是在本项目中为2.0.3版本,但这个问题在其他版本中也会出现)。我使用Jackson对Json进行序列化和反序列化,JsonService的配置如下所示: 因此,多个域对象的值在单个DTO中进行了整理和表示(在本例中,它是一个简单的映射),这些值只是传递给JsonService以转换为Json,然后返回(请求)。所有字段都已正确序列化,但有两个(多个)日期除外,它
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]
}
(返回)
然而,当我到达相关终点时,我得到:
nextBillingDate": "2013-06-19T22:00:00.000+0000"
这是两个小时的休息时间。nextBillingDate属性是一个普通的Java日期对象,底层数据库是psql:
next_billing_date | timestamp without time zone | not null | plain |
因此,我有点不明白为什么随机扣除2小时。我可以理解为什么2小时是一个神奇的数字(时区差异),但我无法解释为什么它会在某些对象上抵消日期(或者实际上仅在日期对象的某些子集上)。需要检查的几件事:
UTC+2:00
,您可以在Bootstrap.groovy
TimeZone.setDefault(TimeZone.getTimeZone(“GMT+2:00”))
注意:-请参阅查找差异 如果这是灵感的来源,请看一看:我建议您使用您在
JsonService
中声明的相同SimpleDateFormat
来打印调试。
next_billing_date | timestamp without time zone | not null | plain |