0

単純な問題があり、ドキュメントが解決に役立たない。

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 ビューをどのように設定すればよいですか? これは正しく動作していないようです。

4

2 に答える 2