単純な問題があり、ドキュメントが解決に役立たない。
Grails v3.3.3 デモ プロジェクトを作成し、JsonApiBook という名前の単純なドメイン クラスを作成しました。
package ttrestapi
import grails.rest.*
@Resource (uri='/jsonApiBook', formats=['json','xml'])
class JsonApiBook {
static constraints = {
}
String name
}
JSON APIレンダリングはドメインクラスでのみ機能する(コントローラークラスでは機能しない)とドキュメントに記載されているため、URIをマークアップしました。
私のブートストラップでは、 book のインスタンスをテーブルに保存しました - そしてそれを一般的に見ることができます。
ビュー ディレクトリに、jsonApiBook フォルダーを作成し、2 つの gson ファイルを作成しました。
このような「_jsonApIBook」テンプレート
import ttrestapi.JsonApiBook
model {
JsonApiBook book
}
json jsonapi.render(book)
jsonapi ヘルパー オブジェクトを呼び出してインスタンスをレンダリングします。
同じディレクトリに、次のような index.json を作成しました。
import ttrestapi.Book
model {
List<Book> bookList
}
// We can use template namespace
// method with a Collection.
json tmpl.book(bookList)
アプリを実行し、郵便配達員またはブラウザーを使用してレンダリングすると、結果が得られますが、Json api に準拠しています (テンプレートは無視されていると思います)。
したがって、localhost:8080/jsonApiBook は単に返されます (デフォルトのレイアウトに見えます):
[
{
"id": 1,
"name": "json api book3"
}
]
localhost:8080/jsonApiBook/1 は「null」を返すだけで、正しくありません。
JSON API 準拠の出力をレンダリングするには、json ビューをどのように設定すればよいですか? これは正しく動作していないようです。