使用 <Foo>gson Grails 视图序列化地图<FooCategory, List>



我们的后端正在构建一个以FooCategory为键的Map,其值是Foo元素的列表。由于控制器将其添加到json渲染过程的模型中,Grailsgson文件如下所示:

model {
List<String> names
Map<FooCategory, List<Foo>> categories
}
json {
names names
categories <<what is the syntax>>
}

经过多次尝试,我实际上无法获得对Foo元素列表的有效引用。例如,我想生成这样的json输出:

{
"names": ["name1", "name2"],
"categories": [
{
"name": "category_1",
"fooCount": 5
},
{
"name": "category_5",
"fooCount": 8
}
] 
}

下一步将使用tmpl.templateName(fooElements)语法将Foo元素列表传递给模板,但目前我只是停留在count属性上。感谢您的帮助!

我发现Grails的视图使用tmpl处理可迭代实体,但由于Map不可迭代,我们必须显式调用entrySet()方法。这里有一个工作版本:

model {
List<String> names
Map<FooCategory, List<Foo>> categories
}
json {
def stats = categories.entrySet().collect { cat ->
[ name: cat.key.name, fooCount: cat.value.size() ]
}
names names
categories stats
}

现在,Iterable(categories.entrySet()(可以传递给一个模板,它看起来像这样:

model {
Map.Entry<FooCategory, List<Foo>> entry
}
json {
FooCategory fooCategory = entry.key
List fooElements = entry.value
...
}

最新更新