私はspringdoc
swaggerドキュメントを作成しようとしています.データ型を持つリクエストボディをクライアントにとってより読みやすい方法で表現したいと思いMap<String, Object>
ます. しかし@io.swagger.v3.oas.annotations.parameters.RequestBody(content = @Content(schema = @Schema(implementation = Map.class)
、スキーマが次のようになると宣言するとString
(下のスクリーンショットを添付)
メソッド宣言
@Operation(security = {@SecurityRequirement(name = "bearer-key")}, summary = "Create Data", operationId = "createData", description = "Create createData for the **`type`**. ")
@ApiResponses(value = {
@ApiResponse(responseCode = "201", description = "Data created", content = @Content(schema = @Schema(implementation = Map.class),
examples = {@ExampleObject(value = "{\n" +
" \"id\": \"927d810c-3ac5-4584-ba58-7c11befabf54\",\n" +
"}")})),
@ApiResponse(responseCode = "400", description = "BAD Request")})
@PostMapping(value = "/data/type", produces = APPLICATION_JSON_VALUE, consumes = APPLICATION_JSON_VALUE)
@io.swagger.v3.oas.annotations.parameters.RequestBody(content = @Content(schema = @Schema(implementation = Map.class),
examples = {@ExampleObject(value = "{\n" +
" \"label\":\"tourism\",\n" +
" \"location\":\"France\"\n" +
" }")}))
ResponseEntity<Map<String, Object>> createData(@Parameter(name = "type", required = true) @PathVariable("type") String type, @Parameter(name = "request payload") @Valid @RequestBody Map<String, Object> body);
Spring ブートはメソッド シグネチャに基づいて型を自動的に推測しますが、データ型については明確ではありませんMap
。たとえば、デフォルトでは、タイプ Map<String, Object> は次のように推測されます。
しかし、API を参照するクライアントにとって、よりわかりやすい方法でスキーマを表示したいと考えています。Githubに適切な解決策がないクローズド チケットがあることがわかりました。私の要件によると、リクエストの本文はタイプにとらわれず、動的なキーと値のペアである必要があるため、リクエストを として受け取る以外に方法はありませんMap<String, Object>
。Map
カスタムのリクエスト/レスポンスモデルを作成するよりも、タイプを使ってより良い方法を実装した人はいますか?