このようなGrailsでいくつかのRESTfulリソースを構成しました
"/book/$id?"(resource:"book")
"/author/$id?"(resource:"author")
しかし、私はこれをもっと一般的なものにしたい
"/$controller/$id?"(resource: controller)
これは機能しません...(404を取得)
GrailsのRESTfulリソースの汎用URLマッピングを構成するにはどうすればよいですか?
このようなGrailsでいくつかのRESTfulリソースを構成しました
"/book/$id?"(resource:"book")
"/author/$id?"(resource:"author")
しかし、私はこれをもっと一般的なものにしたい
"/$controller/$id?"(resource: controller)
これは機能しません...(404を取得)
GrailsのRESTfulリソースの汎用URLマッピングを構成するにはどうすればよいですか?
マッピングの「リソース」部分は、実際のリクエストの実行ではなく、起動時に評価されるように見えます(これをいじってみることから推測されます)。したがって、アプリケーションの起動時に使用可能なドメインクラスに基づいて、動的に必要なUrlMappingのセットを「プリロード」する必要があると思います。このような何かがトリックを行う可能性があります:
class UrlMappings {
static mappings = {
ApplicationHolder.application.getArtefacts('Domain').each { GrailsClass cl ->
"/${cl.propertyName}/$id?"(resource: cl.propertyName )
} ...
ニーズに合った正しいマッピングは、達成しようとしていることによって完全に異なります(質問から判断することはできません)。
一般的なマッピングについて考えてみましょう。
"/$controller/$action?/$id?"{}
これにより、URLの最初の部分が同じ名前のコントローラーにマップされ、2番目の部分がそのコントローラーのアクションにマップされ、3番目の部分がドメインクラスインスタンスの一意の識別子にマップされます。
このマッピングで機能する例:
/ book / show / 2 コントローラー:bookController アクション:表示 id:2 これにより、ブックコントローラーのshowアクションが呼び出されます。 params.idは2になります。 URLに含まれている目的は、本のオブジェクトに関連する詳細を表示することです。 IDは2です。 / question / update / 6 コントローラー:questionController アクション:更新 id:6 これにより、質問コントローラーの更新アクションが呼び出されます。 params.idは6になります。 URLに含まれている目的は、質問の詳細を更新することです。 IDが6のオブジェクト。