JSON.registerObjectMarshaller在引导程序中不起作用

时间:2016-12-16 12:31:41

标签: json grails groovy bootstrapping

当我想测试自定义"渲染为JSON"方法,我使用了以下代码

class BootStrap{
def init = { servletContext ->
 ....
 println "change the json before format"
 JSON.registerObjectMarshaller(Date) {
     println "JSON DATE MARSHAL"
     return it.format("yyyy-MM-dd HH:mm:ss")
     }
 println "change the json after format"
 }
}

但是在控制台中打印的内容是这样的:

  

|编译1个源文件

     

|运行Grails应用程序

     

Active MQ启动。 ConsumerURL是故障转移:ssl:// xxx。

     

格式化之前更改json

     

更改格式后的json

     

|服务器正在运行。浏览到http://xxx

奇怪的是," JSON DATE MARSHAL"没有被打印出来。 但是当我把代码放在控制器中时,它就有用了。

我不知道发生了什么。

任何建议都会受到欢迎。

更新: 就像railsdog所说,似乎init中的关闭并没有起作用。

我认为JSON中的日期格式是这样的:2016-12-15 16:44:21

但我得到的是2016-12-15T08:44:21Z。

当我将marshaller放在控制器中时,它工作正常,JSON中的日期格式符合预期:

2016-12-15 16:44:21

我也得到了控制台输出:" JSON DATE MARSHAL"。

2 个答案:

答案 0 :(得分:0)

我认为注册对象marshaller实际上并不执行/调用闭包,因此不会发出调试。

答案 1 :(得分:0)

而不是在grails应用程序配置中注册marshaller检查属性grails.databinding.dateformats。您可以添加更多不同的日期格式,应由您的应用处理。