У меня была похожая проблема, и я решил ее сегодня:
Сначала вы должны добавить все java -типы к компонентам:
// add Error and ErrorItem to schema
openApi.getComponents().getSchemas().putAll(ModelConverters.getInstance().read(Error.class));
openApi.getComponents().getSchemas().putAll(ModelConverters.getInstance().read(ErrorItem.class));
Затем вы должны создать схему -Используйте его в своем ответе:
// add default responses
// Ref to Error-Object (added in step above)
Schema errorResponseSchema = new Schema();
errorResponseSchema.setName("Error");
errorResponseSchema.set$ref("#/components/schemas/Error");
Теперь вы можете использовать эту ссылку. В этом примере я использую Error только для BadRequest, все остальные ответы по умолчанию не используют схему. Измените его так, как вам нужно: -)
openApi.getPaths().values().forEach(pathItem -> pathItem.readOperations().forEach(operation -> {
ApiResponses apiResponses = operation.getResponses();
apiResponses.addApiResponse("400", createApiResponse("BadRequest", errorResponseSchema));
apiResponses.addApiResponse("403", createApiResponse("Forbidden", null));
apiResponses.addApiResponse("404", createApiResponse("Not Found", null));
apiResponses.addApiResponse("500", createApiResponse("Server Error", null));
}));
Где createApiResponse - это простая частная функция:
private ApiResponse createApiResponse(String message, Schema schema) {
MediaType mediaType = new MediaType();
mediaType.schema(schema);
return new ApiResponse().description(message)
.content(new Content().addMediaType(org.springframework.http.MediaType.APPLICATION_JSON_VALUE, mediaType));
}
Убедитесь, что вы получаете правильный импорт для вашего Error.class, согласно по умолчанию это будет java .lang.Error.