我正在使用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