Grails3GSON视图和域类模板 package mochi import grails.rest.* @Resource(readOnly = false, formats = ['json', 'xml']) class Book { String title }

Grails3GSON视图和域类模板 package mochi import grails.rest.* @Resource(readOnly = false, formats = ['json', 'xml']) class Book { String title },grails,json-view,grails3.2.0,Grails,Json View,Grails3.2.0,我正在研究Grails3,特别是RESTAPI支持特性 新特性之一(来自2.5.5)是新的gson视图 我正试图遵循,但我的模板似乎被忽略了 我已经在上提供了我的示例项目,但重要的是: 我的UrlMapping: "/books"(resources: "book") 我的书域类: class Book { String title static constraints = { title(blank: false) } } package mochi i

我正在研究Grails3,特别是RESTAPI支持特性

新特性之一(来自2.5.5)是新的gson视图

我正试图遵循,但我的模板似乎被忽略了

我已经在上提供了我的示例项目,但重要的是:

我的
UrlMapping

"/books"(resources: "book")
我的
域类:

class Book {

   String title

   static constraints = {
      title(blank: false)
   }
}
package mochi

import grails.rest.*

@Resource(readOnly = false, formats = ['json', 'xml'])
class Book {

    String title

}
从my
BookController

def show(Book book) {
    respond new Book(id: 1, title: "Foo bar")
}
我的
show.gson

model {
   Book book
}
json g.render(book)
json {
   title "Book Template"
}
model {
   Book book
}
json g.render(template: "/book/book", model: [book: book])
最后,我的
book/\u book.gson

model {
   Book book
}
json g.render(book)
json {
   title "Book Template"
}
model {
   Book book
}
json g.render(template: "/book/book", model: [book: book])
通过此设置,我在浏览器中看到的是:

{"title":"Foo bar"}
我上网找了一些例子,发现

这让我相信Grails应该忽略或绕过我的
show.gson
,只渲染我的
\u book.gson
,但事实并非如此。我试图删除我的
show.gson
,但后来我得到了一个空白页

这让我相信我的
show.gson
应该呈现我的
\u book.gson
模板,但这也没有发生

我尝试过清理和重新运行,但得到了相同的结果

我能够使用完全限定的模板名称使其工作:

“固定”
show.gson

model {
   Book book
}
json g.render(book)
json {
   title "Book Template"
}
model {
   Book book
}
json g.render(template: "/book/book", model: [book: book])
可行,但不理想,也不是文档中的内容

我不确定我在这里做错了什么,我一定错过了什么。

[更新]

既然您正在学习,请跟随:)。以正确的方式去做

  • 通过运行以下命令创建新项目:
  • grails创建应用程序我的应用程序名--配置文件RESTAPI

  • 导航到您的项目文件夹:
  • cd我的应用程序名称

  • 创建名为book的restful域类:
  • grails创建域资源mochi.book

    这将为您生成一个名为book的域类,并使用@Resource annotation对其进行注释。您可以将标题字段添加到此域类 package mochi

    import grails.rest.*
    
    @Resource(readOnly = false, formats = ['json', 'xml'])
    class Book {
    
        String title
    
    }
    

  • 您不需要在控制器中定义save方法,只需使用@resource将域类标记为资源,Grails将使用所有REST-API操作为您生成一个控制器。当您使用上面的“创建域资源”时,注释应该已经在那里了,正如我在代码片段中所显示的那样

  • package mochi

    import grails.rest.*
    
    @Resource(readOnly = false, formats = ['json', 'xml'])
    class Book {
    
        String title
    
    }
    
  • 此外,您不需要仅仅为了定义show方法而创建控制器。Grails会自动为标记为@Resource annotation的任何域类创建控制器。如果确实要创建控制器,我推荐两个选项:

    package mochi

    import grails.rest.*
    
    @Resource(readOnly = false, formats = ['json', 'xml'])
    class Book {
    
        String title
    
    }
    
    一,。使用命令:

  • grails创建restful控制器mochi.Book

    这将在controllers目录中为book类创建一个restful控制器。该控制器从一个名为RestfulController的类扩展而来,该类已经定义了执行所有RESTFUL-API操作的方法,包括show

    二,。使用命令:

    grails生成控制器mochi.Book

    这将创建一个包含所有RESTFUL-API操作的控制器。它不会扩展任何类,因为所有这些操作都将直接在此类中定义

    注意:您很少需要触摸这些操作。所以我推荐第一种选择。它使您的代码保持简单和干净

  • 现在对于视图,我总是从grails留给我的地方开始:)。Grails知道把东西放在哪里。要为您的图书域创建视图,我不建议您手动创建。 首先,当您不创建任何视图时,要知道grails会在运行时为您创建一个视图。但看起来,您想要编辑此文件。所以让Grails生成它们,然后从那里编辑它们。很有趣,不是吗
  • 使用以下命令:

    grails生成视图mochi.Book

    这将创建您自己手动创建的所有文件和模板。包括位于正确目录中的_book模板文件。您可以在视图/书本文件夹中编辑它们

    尝试创建新项目并测试所有这些功能,以了解它们的外观

  • 最后,如何将数据导入域类。grails app/init/Bootsrap.groovy中有一个文件。在这里添加您的对象,您将可以使用这些对象 包裹堆叠1 进口莫奇书 类引导{ def init={servletContext-> 新书(标题:“语言”).save() 新书(标题:“数学”).save() } def销毁={ } } 每次应用程序启动时都会执行此文件

    我希望这有帮助。 谢谢……

    [更新]

    既然您正在学习,请跟随:)。以正确的方式去做

  • 通过运行以下命令创建新项目:
  • grails创建应用程序我的应用程序名--配置文件RESTAPI

  • 导航到您的项目文件夹:
  • cd我的应用程序名称

  • 创建名为book的restful域类:
  • grails创建域资源mochi.book

    这将为您生成一个名为book的域类,并使用@Resource annotation对其进行注释。您可以将标题字段添加到此域类 package mochi

    import grails.rest.*
    
    @Resource(readOnly = false, formats = ['json', 'xml'])
    class Book {
    
        String title
    
    }
    

  • 您不需要在控制器中定义save方法,只需使用@resource将域类标记为资源,Grails将使用所有REST-API操作为您生成一个控制器。当您使用上面的“创建域资源”时,注释应该已经在那里了,正如我在代码片段中所显示的那样

  • package mochi

    import grails.rest.*
    
    @Resource(readOnly = false, formats = ['json', 'xml'])
    class Book {
    
        String title
    
    }
    
  • 此外,您不需要仅仅为了定义show方法而创建控制器。Grails会自动为标记为@Resource annotation的任何域类创建控制器。如果确实要创建控制器,我推荐两个选项:

    package mochi

    import grails.rest.*
    
    @Resource(readOnly = false, formats = ['json', 'xml'])
    class Book {
    
        String title
    
    }
    
    一,。使用命令:

  • grails创建restful控制器mochi.Book

    这将在controllers目录中为book类创建一个restful控制器。该控制器从一个名为RestfulController的类扩展而来,该类已经定义了执行所有RESTFUL-API操作的方法,包括show

    二,。使用命令:

    grails基因