Grails の公式ドキュメントによると、
スキャフォールディング プラグインのバージョン 2.0.x には、Grails 2.3 以降で導入された新しい REST API に対応するさまざまなスキャフォールディング テンプレートが含まれています。(ここから取得http://grails.org/doc/latest/guide/scaffolding.html)
しかし、RESTfulness と scaffolding を連携させることはできません (または概念が理解できません)。
最初から始めましょう:
grails create-app myapp
cd myapp/
grails create-domain-class Book
grails create-scaffold-controller myapp.Book
ドメイン クラスにフィールドを追加する
class Book {
String text
static constraints = {
}
}
でアプリを実行しgrails run-app
ます。http://localhost:8080/myapp/
足場がうまく機能することを示すサーフィン:
http://localhost:8080/myapp/book/index
ブックリストを表示するページhttp://localhost:8080/myapp/book/show/1
ページに id = 1 の書籍の詳細が表示されますhttp://localhost:8080/myapp/book/create
ページはブックを作成します- と力強く、古き良き足場。
REST について見てみましょう。公式ドキュメントによるとhttp://localhost:8080/myapp/books/...
、REST のような URL を使用する必要がありますが、このようにアプリにアクセスしようとするcurl -i -H "Accept: application/json" localhost:8080/myapp/books/1
と、大量の HTML で 404 が返されます。
では、ドキュメントを注意深く読みましょう。
Grails で RESTful API を作成する最も簡単な方法は、ドメイン クラスを REST リソースとして公開することです。これは、任意のドメイン クラスに grails.rest.Resource 変換を追加することで実行できます。
問題ありません。Book クラスの見出しは
import grails.rest.*
@Resource(uri='/books') class Book {
http://localhost:8080/myapp/
現在、足場が壊れていることを示すショーをサーフィンしています。
http://localhost:8080/myapp/book/index
ブックリストを表示するページhttp://localhost:8080/myapp/book/create
ページに xml 出力が表示されます<?xml version="1.0" encoding="UTF-8"?><book><text /></book>
- 強制的に、悪い新しいxml出力。
URLMappings.groovyで@Resourceと"/books"(resources:"book")を試してみましたが、スキャフォールディングと RESTfulness を連続して機能させる実用的なソリューションは見つかりませんでした。確かに、私はそれらを別々に動作させることができました。
アップデート
望ましい目標を達成する方法を見つけました。私が見つけた方法は次のとおりです。
- Bookクラスを でマークし
@Resource(uri = "/books")
ます。 - 足場コントローラBookControllerを削除します。
- Book のスキャフォールディングを使用して専用コントローラーを作成します。
class HumanBookController {static scaffold = Book}
URL を含む GUI ページのスキャフォールディングがhttp://localhost:8080/myapp/humanBook/index
うまく機能するようになりました。どちらの json リクエストも、 のような URL で適切に処理されますhttp://localhost:8080/myapp/books/1
。しかし、一般的な Web と json に対して同じことを行う 2 つのコントローラーを持つことはエレガントではありません。