json - Grails使用ObjectId(MongoDB)渲染encodeAsJSON GORM

标签 json serialization grails mongodb

这是一个模型

import org.bson.types.ObjectId

class Foo{  
 ObjectId id  
 String name 

}

这是一个 Action
def action = {
 render(status:200, contentType:"application/json") {
    ['foo' : Foo.get(params.id)]
 }
}

该操作将返回类似这样的内容
{"foo":{"class":"Foo","id":{"class":"org.bson.types.ObjectId","inc":340737392,"machine":-2019394572,"new":false,"time":1299107672000},"name":"fooName"]}

我的问题是,我该如何在json中发送ObjectId的toString,我不要这个
"id":{"class":"org.bson.types.ObjectId","inc":340737392,"machine":-2019394572,"new":false,"time":1299107672000}

我想要更多类似的东西
"id":18893828183

我知道我可以选择想要的参数:
def foo = Foo.get(params.id)
['foo' : 'Foo' :[id:foo.id.toString(), name:foo.name]]

但是我不想总是声明要作为json返回的内容,我想返回所有对象Foo.get(params.id).encodeAsJSON()...

有没有一种方法可以重写encodeAsJSON()

我已经尝试添加
class Foo{
 ....

 static transients : ['idStr']

 def getIdStr(){
     return this.id.toString()
 }
 ....
}

但是在encodeAsJSON()中被忽略

我什至尝试过
class Foo{
 ....
 def toJSON(){
        def obj =  this.encodeAsJSON() 
        def json = new JsonSlurper().parseText(obj);
        json.idString = this.id.toString()
        return json.toString()
    }
...
}

这个“作品”,但是没有。

因为在此之后
 render(status:200, contentType:"application/json") {
    ['foo' : Foo.get(params.id).toJSON()]
 }

渲染对json进行编码,因此所有内容都被“转义了”。

那么您认为解决方案是什么,而构建器总是定义我要返回的内容?

希望,我已经明确了我的问题...。

我将从构建器开始,希望您能给我另一个更简单/更简洁的解决方案...

谢谢

编辑
我只是做了一个将对象作为 map 返回的方法,所以现在我做了这样的事情
render(status:200, contentType:"application/json") { 
   ['foo' : getFooAsMap(Foo.get(params.id))] 
}

最佳答案

在Bootstrap.groovy上注册此对象Marshaller,它将像吊饰

import grails.converters.JSON
import org.bson.types.ObjectId

JSON.registerObjectMarshaller(ObjectId) {
        return it.toStringMongod()
}
一样工作

关于json - Grails使用ObjectId(MongoDB)渲染encodeAsJSON GORM,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5175068/

相关文章:

javascript - 在 bootstrap typeahead 上使用 html 输入数据字段属性

unit-testing - 使用 spock mocking 或 grails mockFor : Null pointer exception 进行单元测试

javascript - 遍历 Stylus 中的嵌套对象

json - 如何使用 VBScript 通过 HTTP API POST JSON 数据?

c# - 如何在 ASP.net Web API 中使用详细参数隐藏/显示结果 JSON

grails - 如何在Hudson中响应控制台输出

gwt - 加载 grails gwt 模块 xml 时出错

java - 将序列化对象作为流读取

python - 没有 ORM、DOM 或表单的对象模式/模型

python - Numpy savez/load 数千个数组,但不是一步完成