Grails 3.1 JSON-Views,呈现类别树

Grails 3.1 JSON-Views, rendering a Category Tree

我正在使用 Graisl 3.1.1,rest-api 配置文件。 我正在尝试构建类别树,但在 JSON-Views.

中呈现类别时遇到一些问题

我正在使用 json 个模板,一个用于 parent,另一个用于 child。 基本上我想为 angular 生成一个 json 这样的东西:

这是我的代码。

有什么帮助吗?

//域名

class Category {
  ObjectId id /* MongoDB */
  static hasMany = [categories: Category]
  String name
  ...

//控制器

def directory(){
   def categories = Category.findAllByCategoriesIsNotNull([sort: 'name', order: 'asc'])
   respond categories
}

//directory.gson

import com.example.Category
model {
    Iterable<Category> categoryList
}
json {
  categories g.render(template: 'parent', collection: categoryList ?: [], var: 'category')
}

//_parent.gson

import com.example.Category
model {
  Category category
}
json {
  id   category.id.toString()
  name category.name
  categories g.render(template: "category/child", collection: category.categories ?: [], var: 'child')
}

问题是上面的categories行,我不确定是什么问题或我的错误。

//_child.gson

import com.example.Category
model {
  Category child
}
json {
  name child.name
}

我一般用在controller里

import grails.converters.JSON

然后是

render result as JSON

我有理由相信您遇到了我几周前遇到的相同新错误(已在 grails-views@1.0.4 中修复),#9720:

it would appear that the relative path isn't recognized for g.render and the fully qualified path is required even when the template is located in the same directory as the calling gson file.

而不是:

categories g.render(template: "category/child", collection: category.categories ?: [], var: 'child')

在模板前加一个斜线:

categories g.render(template: "/category/child", collection: category.categories ?: [], var: 'child')

您可能还需要更改:

categories g.render(template: 'parent', collection: categoryList ?: [], var: 'category')

至:

categories g.render(template: '/category/parent', collection: categoryList ?: [], var: 'category')