springdoc-openapiを使用すると、私のアプリケーションは、コントローラーとモデルのSwagger3アノテーションに基づいてOAS3yaml仕様を生成します。
私が達成したいのは、インライン操作応答を持つことです。 このようなもの:
paths:
/myoperation:
get:
...
responses:
'200':
content:
application/json:
schema:
required:
- count
- results
type: object
properties:
count:
type: integer
results:
type: array
...
コントローラクラスの操作メソッドのアノテーションは次のようになります。
@ApiResponse(responseCode = "200",
description = "OK",
content = @Content(mediaType = "application/json", schema = @Schema(implementation = MyResponseDTO.class, requiredProperties = { "count", "results"} ))
およびMyResponseDTO:
public class MyResponseDTO {
@Schema(required = true, description = "")
private long count;
@ArraySchema(schema = @Schema(implementation = MyModel.class))
private List<DTO> results;
... getters/setters
}
これにより、次のスキーマが作成されます。
...
responses:
200:
content:
application/json:
schema:
$ref: '#/components/schemas/MyResponseDTO'
...
components:
MyResponseDTO:
required:
- count
type: object
properties:
count:
type: integer
format: int64
results:
type: array
items:
$ref: '#/components/schemas/MyModel'
応答コンテンツは、インラインオブジェクトではなく参照です。 ドキュメントにインラインで表示されるように応答/スキーマに注釈を付ける方法はありますか?
私はすでに、この質問を投稿問題springdoc-OpenAPIのため。 しかし、彼らは私にここで質問をするようにアドバイスしました。
だから多分ここの誰かが私を助けることができますか? ありがとう!
ラモンロックス
私たちにはそれを行う方法があるとは思いません(しかし@frantumaは私を訂正するかもしれません)。
なぜインライン定義を探しているのですか? 一般的に、参照された定義は管理が簡単ですが、ユースケースを理解したいと思います。
サードパーティは、当社の製品が実装する必要のあるOAS3インターフェイスを指定しました。 インターフェイスのドキュメント(yaml)には、インライン操作の応答が含まれています。
要件の1つは、同じドキュメントを提供することです。 つまり、サードパーティが提供したものとまったく同じドキュメントを作成するために、Springコントローラー/モデルに注釈を付けようとしています。
したがって、インライン応答を使用することは私の個人的な選択ではなく、規定されています。
とった。 したがって、現時点では、これを行う簡単な方法はありません。 @Schema
アノテーション内のスキーマを手動で記述できますが、それが大きな/複雑なクラスである場合、それは苦痛になります。
より自動化するために、インラインにする必要があることを示す別の注釈を作成し、リーダーを拡張してそのように処理することができます。
さて、あなたの提案をありがとう。 マニュアルの説明を試してみます。
将来的には、 @Schema
アノテーション用の追加のinline=true|false
要素があればいいでしょう。
最も参考になるコメント
さて、あなたの提案をありがとう。 マニュアルの説明を試してみます。
将来的には、
@Schema
アノテーション用の追加のinline=true|false
要素があればいいでしょう。