>我必须在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
我还没有找到一个好的方法来做到这一点是当前版本的 groovy,根据以下 groovy JIRA 票证,我怀疑这是不可能的:
凹槽-6854
阅读该票证似乎有一种解决方法,但它涉及修改一个私有字段,使其非常脆弱和不优雅。
似乎 groovy 开发团队也发现了缺乏可配置性的问题,因为即将推出的 groovy 2.5.0 版本现在有一个新的 JsonGenerator 类,您可以使用它执行以下操作:
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(( 构建器为自定义 json 序列化提供了很大的灵活性。