使用JSON视图生成JSON

使用JSON视图生成JSON,json,grails,grails-3.0,json-view,Json,Grails,Grails 3.0,Json View,我试图在Grails3.1中使用 我有以下控制器: package myapp BasketController { def index(ProductFilterCommand cmd) { [basketList: service.findAllBaskets()] } } 以及下列类别: package myapp class Basket { List<BasketItem> items } class BasketItem

我试图在Grails3.1中使用

我有以下控制器:

package myapp

BasketController {

    def index(ProductFilterCommand cmd) {

        [basketList: service.findAllBaskets()]
    }
}
以及下列类别:

package myapp

class Basket {
    List<BasketItem> items
}

class BasketItem  {
    String name 
}
篮子/_item.gson

import myapp.Item

model {
    Item item
}

json g.render(item)
我想生成json,例如:

{
    "baskets": [{
        "items": [{
            "name": "T-shirt"
        }, {
            "name": "Pants"
        }]
    }, {
        "items": [{
            "name": "T-shirt"
        }, {
            "name": "Pants"
        }]
    }]
}
但我得到的却是:

{
  "baskets": [
    {},
    {}
  ]
}

在我看来像个虫子。实现所需功能的唯一方法是使用如下所示的视图。还要注意使用
collection
而不是
model
。我会在下面测试的示例应用程序中提交一个bug

注意模板作为完全限定名称的用法
basket/item
。这是 缺陷


Basket
BasketItem
-它们是域类吗?谢谢@dmahapatro它工作得很好。我接受了你的回答。对不起,我迟了回答。它们不是域类,而是普通的groovy类。对于POGO不同于域类,所有这些仪式和模板都不是必需的,只是
json{basketList}
in
index.gson
会给出预期的结果,因此我之前提出了问题。显然,您需要篮球名单的
型号
dsl.:)我对视图-1.1.5有这个问题。执行show.gson,json输出良好。但是index.gson似乎根本没有调用。我需要确认index.gson中的System.out.println。
{
    "baskets": [{
        "items": [{
            "name": "T-shirt"
        }, {
            "name": "Pants"
        }]
    }, {
        "items": [{
            "name": "T-shirt"
        }, {
            "name": "Pants"
        }]
    }]
}
{
  "baskets": [
    {},
    {}
  ]
}
//index.gson
import com.example.Basket

model {
    Iterable<Basket> basketItems
}

json {
    baskets g.render(template: 'basket', collection: basketItems, var: 'basket')
}
//_basket.gson
import com.example.Basket

model {
    Basket basket
}

json {
    items g.render(template: "basket/item", collection: basket.items, var: 'item')
}
//_item.gson
import com.example.BasketItem

model {
    BasketItem item
}

json g.render(item)

//or if id is not required in response
/*json {
    name item.name
}*/