在Grails中,您可以使用JSON转换器在控制器中执行此操作:
render Book.list() as JSON
渲染结果是
[ {"id":1, "class":"Book", "author":"Stephen King", "releaseDate":'2007-04-06T00:00:00', "title":"The Shining"} ]
您可以通过在Config.groovy中进行设置来控制输出日期
grails.converters.json.date = 'javascript' // default or Javascript
然后结果将是本机javascript日期
[ {"id":1, "class":"Book", "author":"Stephen King", "releaseDate":new Date(1194127343161), "title":"The Shining"} ]
如果我想获得这样的特定日期格式:
"releaseDate":"06-04-2007"
我必须使用'collect',这需要大量输入:
return Book.list().collect(){ [ id:it.id, class:it.class, author:it.author, releaseDate:new java.text.SimpleDateFormat("dd-MM-yyyy").format(it.releaseDate), title:it.title ] } as JSON
有更简单的方法吗?
有一个简单的解决方案:自Grails 1.1以来,转换器已经被重写为更加模块化.不幸的是我没有完成文档.它现在允许注册所谓的ObjectMarshallers(实现org.codehaus.groovy.grails.web.converters.marshaller.ObjectMarshaller
接口的简单Pogo/Pojo ).
要获得所需的输出,可以这样在BootStrap.groovy中注册这样的ObjectMarshaller:
import grails.converters.JSON; class BootStrap { def init = { servletContext -> JSON.registerObjectMarshaller(Date) { return it?.format("dd-MM-yyyy") } } def destroy = { } }
还有其他几种方法可以自定义转换器的输出,我会尽力赶上文档.