Springboot集成SpringDoc接口文档方式

 更新时间:2026年01月04日 08:42:59   作者:TheTsing  
使用Spring Boot 3.0、JDK 17和Springdoc 2.2创建一个简单的API文档生成器,首先创建了一个Spring Boot项目并引入了Springdoc依赖,然后编写了一个配置文件SpringDocConfig.java,启动项目后,可以通过访问http://localhost:8080/swagger-ui/index.html来查看生成的API文档

前言

基于springboot3.0+jdk17+springdoc2.2实现。

一、创建springboot项目,引入springdoc依赖



 

二、编写springdoc配置文件SpringDocConfig.java

import io.swagger.v3.oas.models.OpenAPI;
import io.swagger.v3.oas.models.info.Info;
import io.swagger.v3.oas.models.media.Content;
import io.swagger.v3.oas.models.responses.ApiResponse;
import io.swagger.v3.oas.models.security.SecurityRequirement;
import io.swagger.v3.oas.models.security.SecurityScheme;
import org.springdoc.core.customizers.GlobalOpenApiCustomizer;
import org.springdoc.core.properties.SwaggerUiConfigProperties;
import org.springdoc.core.utils.Constants;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpStatus;
import org.springframework.http.MediaType;

/**
 * SpringDoc配置类
 *
 * @author TheTsing
 */
@Configuration
@ConditionalOnProperty(name = Constants.SPRINGDOC_ENABLED, matchIfMissing = true)
public class SpringDocConfig {

    @Bean
    public OpenAPI openAPI() {
        return new OpenAPI()
                .info(new Info().title("API Documentation").version("snapshot"))
                .schemaRequirement(HttpHeaders.AUTHORIZATION,
                        new SecurityScheme()
                                // 普通 Token
                                //.name(HttpHeaders.AUTHORIZATION)
                                //.type(SecurityScheme.Type.APIKEY)
                                //.in(SecurityScheme.In.HEADER)
                                // Bearer Token
                                .name(HttpHeaders.AUTHORIZATION)
                                .type(SecurityScheme.Type.HTTP)
                                .scheme("bearer"))
                .addSecurityItem(new SecurityRequirement().addList(HttpHeaders.AUTHORIZATION));
    }

    @Bean
    public GlobalOpenApiCustomizer globalOpenApiCustomizer() {
        return openApi -> openApi.getPaths().values().stream().flatMap(pathItem -> pathItem.readOperations().stream()).forEach(operation -> {
            operation.getResponses().addApiResponse(String.valueOf(HttpStatus.BAD_REQUEST.value()),
                    new ApiResponse().description("客户端请求存在语法错误或业务异常").content(new Content().addMediaType(MediaType.TEXT_PLAIN_VALUE, new io.swagger.v3.oas.models.media.MediaType().example(HttpStatus.BAD_REQUEST.getReasonPhrase()))));
            operation.getResponses().addApiResponse(String.valueOf(HttpStatus.UNAUTHORIZED.value()),
                    new ApiResponse().description("认证失败").content(new Content().addMediaType(MediaType.TEXT_PLAIN_VALUE, new io.swagger.v3.oas.models.media.MediaType().example(HttpStatus.UNAUTHORIZED.getReasonPhrase()))));
            operation.getResponses().addApiResponse(String.valueOf(HttpStatus.FORBIDDEN.value()),
                    new ApiResponse().description("没有权限").content(new Content().addMediaType(MediaType.TEXT_PLAIN_VALUE, new io.swagger.v3.oas.models.media.MediaType().example(HttpStatus.FORBIDDEN.getReasonPhrase()))));
            operation.getResponses().addApiResponse(String.valueOf(HttpStatus.INTERNAL_SERVER_ERROR.value()),
                    new ApiResponse().description("服务器内部错误").content(new Content().addMediaType(MediaType.TEXT_PLAIN_VALUE, new io.swagger.v3.oas.models.media.MediaType().example(HttpStatus.INTERNAL_SERVER_ERROR.getReasonPhrase()))));
        });
    }

    @Bean
    @Primary
    public SwaggerUiConfigProperties swaggerUiConfig() {
        SwaggerUiConfigProperties config = new SwaggerUiConfigProperties();
        config.setPersistAuthorization(true);
        config.setFilter("true");
        config.setDefaultModelsExpandDepth(-1);
        config.setDefaultModelExpandDepth(10);
        config.setDisplayRequestDuration(true);
        config.setDocExpansion("none");
        config.setShowCommonExtensions(true);
        return config;
    }

}

三、启动项目访问文档

http://localhost:8080/swagger-ui/index.html



 

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • Springboot jar主清单属性丢失解决方案

    Springboot jar主清单属性丢失解决方案

    这篇文章主要介绍了Springboot jar主清单属性丢失解决方案,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-06-06
  • RabbitMQ消息拒绝如何解决

    RabbitMQ消息拒绝如何解决

    这篇文章主要介绍了RabbitMQ消息拒绝如何解决问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-01-01
  • java中的i++和++i的区别详解

    java中的i++和++i的区别详解

    这篇文章主要介绍了java中的i++和++i的区别详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-08-08
  • Java 中如何使用 stream 流

    Java 中如何使用 stream 流

    这篇文章主要介绍了Java中如何使用stream流,文章围绕Stream API支持的许多操作展开主题,感兴趣的小伙伴可以参考一下
    2022-09-09
  • Mybatis查询时的延迟加载解析

    Mybatis查询时的延迟加载解析

    这篇文章主要介绍了Mybatis查询时的延迟加载解析,先从单表查询,需要时再从关联表去关联查询,能大大提高数据库性能,因为查询单表要比关联查询多张表速度要快,延迟加载分为两种:深度延时加载,侵入式延迟加载,需要的朋友可以参考下
    2023-10-10
  • 浅谈MyBatis 中的特殊字符串处理

    浅谈MyBatis 中的特殊字符串处理

    在使用MyBatis进行数据库操作时,我们常常会遇到需要处理特殊字符串的情况,本文就来介绍一下MyBatis特殊字符串处理,具有一定的参考价值,感兴趣的可以了解一下
    2026-02-02
  • 基于java实现一个脱敏组件

    基于java实现一个脱敏组件

    这篇文章主要为大家详细介绍了如何基于java实现一个脱敏组件,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下
    2024-11-11
  • Java Instrumentation从概念到基本用法详解

    Java Instrumentation从概念到基本用法详解

    Java Instrumentation是java.lang.instrument包提供的 API,允许开发者在类被JVM 加载时对其进行修改,或者在运行时重新定义类的字节码,本文给大家介绍Java Instrumentation从概念到基本用法详解,感兴趣的朋友一起看看吧
    2025-09-09
  • mybatis-plus中BaseMapper入门使用

    mybatis-plus中BaseMapper入门使用

    本文主要介绍了mybatis-plus中BaseMapper入门使用,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-08-08
  • SpringBoot + MapStruct 属性映射工具的使用详解

    SpringBoot + MapStruct 属性映射工具的使用详解

    MapStruct 是一个代码生成器,简化了不同的 Java Bean 之间映射的处理,所谓的映射指的就是从一个实体变化成一个实体。接下来通过本文给大家介绍SpringBoot + MapStruct 属性映射工具的使用,需要的朋友可以参考下
    2021-09-09

最新评论