2011-08-15 34 views
3

我想在我的JSON输出中为我的一个类(Account)包含瞬态属性。对我来说,最好的方法是使用Bootstrap.groovy中的JSON.grailsObjectMarshaller()为我的类创建一个自定义的JSON结构,但是我似乎无法使它工作。这里是我的代码BootStrap.groovy中:无法获取JSON.registerObjectMarshaller()在Grails 1.3.7中创建自定义JSON

import grails.converters.deep.JSON 
import stocks.Account 

class BootStrap { 

def init = { servletContext -> 

    JSON.registerObjectMarshaller(Account, { 
     println("test") 
     def returnArray = [:] 
     returnArray['email'] = it.email 
     returnArray['test'] = "success" 
     return returnArray 
    }) 

} 

def destroy = { 
} 

} 

这里是我的AccountController.groovy代码:

def jsonTest = { 
    def account = Account.findById('1') 
    render account as JSON 
} 

,这里是我的输出,它充当如果我没有叫JSON .registerObjectMarshaller()在所有:

{"class":"stocks.Account","id":1,"email":"ian...","firstName":"Ian"} 

的事情,我已经试过了,但似乎并没有帮助:

  1. Grails的清洁
  2. 上JSON.registerObjectMarshaller()
  3. 使用常规JSON转换器提高优先级为1,而不是深转换器

回答

1

您使用Grails的哪个版本的?

它的工作对我来说有BootStrap.groovy中以下

import grails.converters.JSON 
... 
JSON.registerObjectMarshaller(Bank) { 
     def returnArray = [:] 
     returnArray["name"] = it.name 
     return returnArray 
} 

以下域类

class Bank implements Serializable { 

    String name 
} 

在控制器

import grails.converters.JSON 
... 
def jsonTest = { 
    def account = Bank.findById('1') 
    render account as JSON 
} 

并得到下面的代码如下JSON back:

{"name":"Niko Securities"} 

注意:我在Bootstrap和控制器中只使用常规的JSON转换器,因此可能检查您在两个地方都使用相同的转换器。

+0

我正在使用版本1.3.7。您?我会再试一次并回报。 –

+0

使用常规的JSON转换器工作。我想你不能在深层转换器中使用objectMarshaller。这是不幸的,但我想我会做出应有的。 –

相关问题