生成 JSON 和 JSON- 视图
Generate JSON With JSON-Views
我正在尝试在 Grails 3.1 中使用 JSON-Views。
我有以下控制器:
package myapp
BasketController {
def index(ProductFilterCommand cmd) {
[basketList: service.findAllBaskets()]
}
}
以及以下 类:
package myapp
class Basket {
List<BasketItem> items
}
class BasketItem {
String name
}
以下是我认为可行的 gson 文件:
basket/index.gson
import myapp.Basket
model {
Iterable<Basket> basketList
}
json.baskets(basketList) {
g.render(template: "basket", model: [basket: it])
}
basket/_basket.gson
import myapp.Basket
model {
Basket basket
}
json.items(basket.items) {
g.render(template: "item", model:[item: it])
}
basket/_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
的用法。我会在下面用于测试的示例应用程序中提交错误。
Note the usage of template as a fully qualified name basket/item
. This is the
defect.
//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
}*/
我正在尝试在 Grails 3.1 中使用 JSON-Views。
我有以下控制器:
package myapp
BasketController {
def index(ProductFilterCommand cmd) {
[basketList: service.findAllBaskets()]
}
}
以及以下 类:
package myapp
class Basket {
List<BasketItem> items
}
class BasketItem {
String name
}
以下是我认为可行的 gson 文件:
basket/index.gson
import myapp.Basket
model {
Iterable<Basket> basketList
}
json.baskets(basketList) {
g.render(template: "basket", model: [basket: it])
}
basket/_basket.gson
import myapp.Basket
model {
Basket basket
}
json.items(basket.items) {
g.render(template: "item", model:[item: it])
}
basket/_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
的用法。我会在下面用于测试的示例应用程序中提交错误。
Note the usage of template as a fully qualified name
basket/item
. This is the defect.
//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
}*/