使用JsonOutput序列化日期时的时区

时间:2018-05-25 08:23:58

标签: groovy timezone iso8601

我必须在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:14 Z

1 个答案:

答案 0 :(得分:0)

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

GROOVY-6854

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

似乎groovy开发团队已经确定缺乏可配置性,因为即将推出的2.5.0版本的groovy现在有new JsonGenerator class,您可以使用JsonGenerator.Options() builder执行以下操作:

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"}

随附的https://codepen.io/bashirpour/pen/JvgeYy为自定义json序列化提供了很大的灵活性。