OpenAPI SpringBoot 3,如何添加全局错误响应代码

axkjgtzd  于 2024-01-06  发布在  Spring
关注(0)|答案(1)|浏览(276)

我试图在Sping Boot 3项目中配置Swagger,我想全局设置HTTP状态码响应,而不是在每个端点上复制粘贴代码。我记得我们曾经在Swagger 2或Docket中这样做过,但现在事情被转换为OpenAPI,我找不到这样做的方法。
可以有人请帮助我修改下面的代码,以便我添加全球响应。

  1. @Configuration
  2. public class OpenApiConfig {
  3. @Bean
  4. public OpenAPI usersMicroserviceOpenAPI() {
  5. Server localServer = new Server()
  6. .url("http://localhost:8080")
  7. .description("A Server URL");
  8. Contact contact = new Contact()
  9. .email("[email protected]")
  10. .name("Exampl man");
  11. Info info = new Info()
  12. .contact(contact)
  13. .description("Spring Boot 3 + Open API 3")
  14. .summary("Demo of Spring Boot 3 & Open API 3 Integration")
  15. .title("Sample")
  16. .version("V1.0.0")
  17. .license(new License().name("Apache 2.0").url("http://springdoc.org"));
  18. return new OpenAPI().info(info).
  19. addServersItem(localServer);
  20. }
  21. }

字符串
我不想在每个API上面写以下内容

  1. @ApiResponses(value = {
  2. @ApiResponse(responseCode = "400", description = "Bad Request",
  3. content = { @Content(mediaType = "application/json",
  4. schema = @Schema(implementation = ErrorRes.class))}),
  5. @ApiResponse(responseCode = "404", description = "Resource Not Found",
  6. content = { @Content(mediaType = "application/json",
  7. schema = @Schema(implementation = ErrorRes.class))})
  8. })


我试着创建一个接口,它有上面的注解,并在每个REST控制器上实现,它确实很神奇,但它删除了默认的200响应,并根据方法的签名返回了Class对象。

3pmvbmvn

3pmvbmvn1#

您可以将创建OpenApiCustomizer bean的方法添加到OpenApiConfig类中,如下所示。

  1. @Bean
  2. public OpenApiCustomizer openApiCustomizer() {
  3. ResolvedSchema errResSchema =
  4. ModelConverters.getInstance().resolveAsResolvedSchema(new AnnotatedType(ErrorRes.class));
  5. Content content =
  6. new Content().addMediaType("application/json", new MediaType().schema(errResSchema.schema));
  7. return openApi ->
  8. openApi
  9. .getPaths()
  10. .values()
  11. .forEach(
  12. pathItem ->
  13. pathItem
  14. .readOperations()
  15. .forEach(
  16. operation ->
  17. operation
  18. .getResponses()
  19. .addApiResponse(
  20. "400",
  21. new ApiResponse()
  22. .description("Bad Request")
  23. .content(content))
  24. .addApiResponse(
  25. "404",
  26. new ApiResponse()
  27. .description("Resource Not Found")
  28. .content(content))));
  29. }

字符串
它将把API响应附加到应用程序中的所有路径。

展开查看全部

相关问题