2016-11-21 92 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

    我編輯了答案,使其更加詳細。我希望它可以幫助 –