我正在使用gson和Web配置文件。

我的域名是:

package json
import grails.rest.*

@Resource(readOnly = false, formats = ['json', 'xml'])
class Hero {
    String name
    String data
    String relation
    Book book
    static hasMany = [children: Hero]

我的 Controller 是:
package json

import grails.rest.*
import grails.converters.*

class HeroController extends RestfulController {
    static responseFormats = ['json', 'xml']
    HeroController() {
        super(Hero)
    }
    def show(Hero hero){
        respond hero
    }
}

我的gson:

hero.gson
import json.Hero

model {
    Hero hero
}

json tmpl.hero(hero)

_hero.gson
import json.Hero

model {
    Hero hero
}

json {
    //data hero.data
    id hero.id
    data(relation: hero.relation)
    name hero.name
    children g.render(hero.children)
}

如果我使用Restful Profile运行它,那么所有子节点都将正确呈现。
如果我使用网络配置文件,则仅呈现两个级别的深度。

我的预期结果是:
{
    "id": 4,
    "data": {
        "relation": "e"
    },
    "name": "e",
    "children": [{
            "id": 2,
            "data": {
                "relation": "c"
            },
            "name": "c",
            "children": [{
                    "id": 1,
                    "data": {
                        "relation": "b"
                    },
                    "name": "b",
                    "children": []
                }
            ]
        }

是否可以进行一对多的json渲染(与Restful概要文件一样)?
有没有一种方法可以控制渲染的深度?

附言我阅读了文档,这部分对我来说不是很清楚:

最佳答案

是的,可以使用网络配置文件呈现json。
我可以通过添加到build.gradle来做到这一点:

apply plugin:"org.grails.plugins.views-json"

dependencies {

    compile "org.grails.plugins:views-json"
    compile "org.grails.plugins:views-json-templates"



bootRun {
    jvmArgs('-Dspring.output.ansi.enabled=always')
    addResources = true
}

并在域类中稍加更改即可使用您的代码:
child 懒惰:false
@Resource(readOnly = false, formats = ['json', 'xml'])
class Hero {
    String name
    String data
    String relation
    //Book book
    static hasMany = [children: Hero]

    static mapping = {
        children lazy: false
    }

这将更改获取模式。
您可以在此处咨询有关获取的信息:

enter link description here http://docs.grails.org/3.1.1/ref/Database%20Mapping/fetch.html

http://docs.grails.org/3.1.1/guide/single.html#fetching

10-08 00:53