【问题标题】:Timezone when serialize date with JsonOutput使用 JsonOutput 序列化日期时的时区
【发布时间】:2018-05-25 08:23:58
【问题描述】:

我必须在 json 中序列化一个对象,其中日期必须是 iso-8601。问题是时区是+0000,我想要'Z'。有什么想法吗?

class MyClass{
 Date date = new Date()
 String string = "hello"
}   
def myClass = new MyClass()
log.error("Json->"+JsonOutput.toJson(myClass))

输出:

{"date":"2018-05-25T08:16:14+0000","string":"hello"}

预计:2018-05-25T08:16:14Z

【问题讨论】:

  • 这有关系吗?根据 ISO 8601 标准,Z+0000 是同义词。

标签: groovy timezone iso8601


【解决方案1】:

我还没有找到一个很好的方法来做到这一点,即当前版本的 groovy,根据以下 groovy JIRA 票证,我怀疑这是不可能的:

GROOVY-6854

阅读该票似乎有一种解决方法,但它涉及修改一个私有字段,这使得它变得非常脆弱和不优雅。

似乎 groovy 开发团队也发现了缺乏可配置性,因为即将推出的 groovy 2.5.0 版本现在有一个new JsonGenerator class,您可以使用它执行以下操作:

import groovy.json.*

class MyClass { 
  Date now = new Date()
}

def generator = new JsonGenerator.Options()
    .dateFormat("yyyy-MM-dd'T'HH:mm:ssXXX")
    .build()

println generator.toJson(new MyClass())

打印:

{"now":"2018-05-27T12:50:25Z"}

随附的JsonGenerator.Options() builder 为自定义 json 序列化提供了很大的灵活性。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-10-30
    • 1970-01-01
    • 1970-01-01
    • 2015-07-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多