无法让JSON.registerObjectMarshaller()在Grails 1.3.7中创建自定义JSON

时间:2011-08-15 02:30:30

标签: json grails

我想在我的JSON输出中为我的一个类(Account)添加瞬态属性。我这样做的最好方法是在Bootstrap.groovy中使用JSON.grailsObjectMarshaller()为我的类创建一个自定义的JSON结构,但是我似乎无法让它工作。这是我的Bootstrap.groovy代码:

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 clean
  2. 在JSON.registerObjectMarshaller()
  3. 上将优先级提高到1
  4. 使用常规JSON转换器代替深度转换器

1 个答案:

答案 0 :(得分: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
}

Controller中的以下代码

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

获得以下JSON:

{"name":"Niko Securities"}

注意:我在Bootstrap和控制器中只使用常规JSON转换器,因此可能会检查两个位置是否使用相同的转换器。