2016-11-21 91 views
0

我在玩Grails 3,特别是REST Api支持功能。Grails 3 gson视图和域类模板

新功能之一(来自2.5.5)是新的gson视图。

我试图按照documentation,但我的模板似乎被忽略。

我所做的github可我的样本项目,但重要的位在这里:

UrlMapping

"/books"(resources: "book") 

Book域类:

class Book { 

    String title 

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

从我BookController

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

show.gson

model { 
    Book book 
} 
json g.render(book) 

最后,我book/_book.gson

json { 
    title "Book Template" 
} 

我在浏览器中看到这个设置是什么:

{"title":"Foo bar"} 

我去寻找网上的一些例子和发现this one

这使我相信,Grails的应该忽视或绕过我的show.gson和只呈现我的_book.gson,但情况并非如此。我尝试删除我的show.gson,但后来我得到了一个空白页。

Grails documentation让我相信我的show.gson应该呈现我的_book.gson模板,但这种情况也没有发生。

我试过清洗和重新运行,但我得到了同样的结果。

我能够得到它使用一个完全合格的模板名称的工作:

“固定” show.gson

model { 
    Book book 
} 
json g.render(template: "/book/book", model: [book: book]) 

可行的,但不理想,而不是出了什么的文档。

我不知道我在做什么错在这里,我必须错过一些东西。

回答

3

[已更新]

因为,您正在学习,请遵循:)。要做到这一点的正确方法

  1. 运行创建新项目:

Grails的创造,应用我-APP-名--profile REST的API

  • 导航到项目文件夹:
  • CD我-APP-名

  • 创建一个宁静的域级本书叫:
  • Grails的创建域资源mochi.book

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

     
        package mochi

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

  • 你不需要在你的控制器来定义保存方法,只需标记您的域类作为一个拥有@Resource的资源,Grails将为您使用所有REST-API操作生成一个控制器。当你使用上面的“create-domain-resource”时,注释应该已经存在,就像我在代码片段中显示的一样。

  • 此外,您不需要创建控制器来定义show方法。 Grails自动为任何标注有@Resource注解的域类创建一个控制器。如果你想创建一个控制器,我推荐两种选择:

    i。用命令:

  • 的Grails创建的RESTful控制器mochi.Book

    这将在你的控制器目录中创建你的书类宁静的控制器。该控制器从名为RestfulController的类扩展而来,该类已经定义了执行所有RESTFUL-API操作(包括show)的方法。

    ii。用命令:

    Grails的生成控制器mochi.Book

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

    注意:您可能需要触摸这些操作的情况非常罕见。所以我建议第一个选项。它使您的代码简单而干净。

    1. 现在有了这些意见,我总是从Grails留给我的地方开始:)。 Grails知道在哪里放东西。要为您的图书域创建视图,我不建议您手动执行。 首先,当你不创建任何视图时,知道grails会在运行时为你创建一个视图。但看起来,你想编辑这个文件。因此,让Grails生成它们,然后从那里编辑它们。好玩,不是吗?

    使用命令:

    的Grails生成的视图mochi.Book

    这将创建所有的文件和你手动创建yourself.Including的_book模板文件模板,在正确的目录中。您可以在这里,在您的views/book文件夹中编辑它们。

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

    1. 最后,您如何获取数据到您的域级。在grails-app/init/Bootsrap.groovy中有一个文件。在这里添加你的对象,并且会有适合你的。
     
        package stack1 
    
    import mochi.Book 
    
    class BootStrap { 
    
        def init = { servletContext -> 
         new Book(title: "Languages").save() 
         new Book(title: "Maths").save() 
        } 
        def destroy = { 
        } 
    } 
    

    执行该文件,每次应用程序启动

    Check a screenshot of the location of my views

    我希望这有助于。 谢谢......

    +0

    我很困惑,我的'Book'域名下'mochi.Book',所以我需要把我的意见在'意见/ mochi/book /',例如'views/mochi/book/_book.gson'?这是新的3.x?除非我有多个同名的域对象,并且需要命名空间,否则我从来不需要在包名下面放置视图。 – Townsfolk

    +0

    我试着将'_book.gson'模板移动到一个软件包目录中,但没有奏效。 – Townsfolk

    +0

    我编辑了答案,使其更加详细。我希望它可以帮助 –