如何在Grails中将普通对象呈现为JSON和XML?

如何在Grails中将普通对象呈现为JSON和XML?,json,grails,groovy,Json,Grails,Groovy,我有一个类似于以下的控制器代码: def doSomethingAwesome() { Domain domainObject = prepareDomainObject() //do something on the domain object Model model = new Model(name: domainObject.name, description: domainObject.description) respond model } packa

我有一个类似于以下的控制器代码:

def doSomethingAwesome() {
    Domain domainObject = prepareDomainObject()
    //do something on the domain object
    Model model = new Model(name: domainObject.name, description: domainObject.description)
    respond model
}
package demo

class DemoController {

    static responseFormats = ['json']

    def index() {
        def m = new Model(name: 'Some Name', description: 'Some Description')
        respond m
    }
}

class Model {
    String name
    String description
}
可以看出,我正试图用包装在模型对象中的数据进行响应。但是,模型类不是域类;这只是一个普通的Groovy类。当我尝试单独测试这段代码时,我让它通过测试,但是当我用所有其他测试测试它时,我得到GroovyCastException,表示该对象不能转换为JSON

在我的搜索中出现的一些文章建议我将模型对象放在贴图中,然后渲染该贴图。比如:

render ['model': model] as JSON

然而,这不是我想要的响应消息。此外,XML消息看起来会非常不同。

的Grails 2.4.3演示项目演示了如何将POGO而不是域类传递给respond方法。包含以下内容:

def doSomethingAwesome() {
    Domain domainObject = prepareDomainObject()
    //do something on the domain object
    Model model = new Model(name: domainObject.name, description: domainObject.description)
    respond model
}
package demo

class DemoController {

    static responseFormats = ['json']

    def index() {
        def m = new Model(name: 'Some Name', description: 'Some Description')
        respond m
    }
}

class Model {
    String name
    String description
}

它不是简单地将模型呈现为JSON吗?resonse目前看起来怎么样,您希望它看起来怎么样?作为JSON呈现的效果并不好,因为我认为在内部Response基本上就是这样做的。Model只是一个普通的Groovy类。您可以认为上面的名称和描述就是它的所有属性。我希望响应看起来像是在没有外部容器对象将其包装在内部的情况下通常呈现的模型对象。rendercontentType:application/json{booktitle:b.title,author:b.author from here:也许这对你有帮助?为什么你需要一个模型POGO在这里?一个简单的散列就是这样做的原因,我认为它们非常合理。例如,模型类可以来自其他模块/jar。我也不能使用map,因为它在XML中不能很好地转换。这个例子响应格式中仅包含json,但当然,您可以使用任何您想要支持的内容。如果您愿意,可以完全忽略这一点。例如,如果您发送带有Accept头的请求,指示您想要application/json或application/xml,则它仍然有效。我仍然使用2.3.11,因为我认为2.4.x需要Java 7,我仍然支持它关于升级到的问题。POGO渲染仅在2.4.3上可用吗?我还注意到控制器不再扩展RestfulController。如果我理解正确,responseFormats只被RestfulController子类使用。这是在2.4.x中更改的,还是我只是误解了?我认为2.4.x需要Java 7-我不认为是这样正确。如果我理解正确,responseFormats只会被RestfulController子类使用。-这是不正确的。我只是对repo进行了更改,将应用程序降级为Grails 2.3.11。