REST-APIでは、マルチテナント対応が必要です。@ModelAttribute注釈付きメソッド内の@PathVariable注釈付きパラメータを自動的に文書化
@RestController
public class FooController extends ApiController {
@RequestMapping(value = "/foo", method = GET)
public List<Foo> getFoo(@ApiIgnore @ModelAttribute Tenant tenant) {
return service.getFoos(tenant);
}
}
:これをachivingために、すべての残りのコントローラは、要求のマッピングのプレフィックスを定義し、次のように
@RequestMapping(path = "/{tenantKey}/api")
public class ApiController {
@ModelAttribute
public Tenant getTenant(@PathVariable("tenantKey") String tenantKey) {
return repository.findByTenantKey(tenantKey);
}
}
派生コントローラはモデルを使用すると、彼らの要求マッピング方法で属性を作るモデル属性を公開し、共通のRESTコントローラをサブクラス化
このエンドポイントは、swagger-uiで十分に文書化されています。パス/{tenantKey}/api/foo
のGETマッピングで文書化されたエンドポイントを取得します。
私の問題は、{tenantKey}パス変数がパラメータとしてswagger-uiに記録されていないことです。 swaggerのパラメータセクションはまったくレンダリングされません。コントローラメソッドにStringパラメータを追加すると、@PathVariable("tenantKey)
でアノテーションを付けても問題ありませんが、コントローラメソッドにtenantKey
パラメータは不要です。解決済みのテナントはすでにモデル属性として使用可能なためです。
私の質問は:この設定でApiController
の@ModelAttriute
注釈付きの方法から@PathVariable
を取得する方法はありますか?
プロジェクトセットアップは
- 春ブーツ(1.4.2)
- springfox-swagger2である(2.6.1)
- springfox-闊歩-UI(2.6.1)
ご回答ありがとうございます。私はグローバルパス変数を設定し、これは私の問題を完全に解決します。 Btw: 'getTenant'メソッドは要求マッピングとして扱われません。これは何らかの形で文書化されることはありませんが、内部的にしか動作せず、REST APIに影響を与えないため、これは私が期待する動作です。 –