一部のエラー コードについて、API のすべてのエンドポイントにデフォルトのエラー モデルを追加しようとしています。
次の問題を読んで、部分的な解決策を見つけました。
これは、そのカスタマイズ用に作成している Bean です。
@Bean
public OpenApiCustomiser customOpenApiCustomiser() {
return openApi -> {
openApi.getPaths().values().forEach(pathItem -> pathItem.readOperations().forEach(operation -> {
Schema sharedErrorSchema = ModelConverters.getInstance()
.read(Error.class)
.getOrDefault("Error", new Schema());
MediaType sharedMediaType = new MediaType().schema(sharedErrorSchema);
Content sharedContent = new Content()
.addMediaType(APPLICATION_JSON_VALUE, sharedMediaType);
ApiResponses apiResponses = operation.getResponses();
ApiResponse response = new ApiResponse()
.description("Unhandled server error")
.content(sharedContent);
apiResponses.addApiResponse("500", response);
}));
};
}
そして、私の Error クラスは次のようになります。
public class Error {
private String message;
private List<ErrorItem> errorItems;
}
問題は、swagger-ui でエンドポイント定義の 1 つを開くと、次のエラーが発生することです。
Could not resolve reference: Could not resolve pointer: /components/schemas/ErrorItem does not exist in document
ErrorItem のスキーマを定義して、swagger-ui で使用できるようにするにはどうすればよいですか?
私は使っている:
- スプリング ブート => 2.2.4.Release
- springdoc-openapi-ui => 1.3.0
- springdoc-openapi-security => 1.3.0