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中@ConditionalOnBean注解的具体使用

    SpringBoot中@ConditionalOnBean注解的具体使用

    本文主要介绍了SpringBoot中@ConditionalOnBean注解的具体使用,用于根据是否存在指定Bean动态注册Bean,支持类型、名称、注解及搜索范围控制,常见于按需加载、自动配置和可选依赖场景,与@ConditionalOnMissingBean形成条件对立
    2025-06-06
  • Java实现微信扫码登入的实例代码

    Java实现微信扫码登入的实例代码

    这篇文章主要介绍了java实现微信扫码登入功能,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-06-06
  • WebService的相关概念

    WebService的相关概念

    这篇文章主要介绍了WebService的相关概念的相关资料,需要的朋友可以参考下
    2017-10-10
  • springboot项目中后端接收前端传参的方法示例详解

    springboot项目中后端接收前端传参的方法示例详解

    这篇文章主要介绍了springboot项目中一些后端接收前端传参的方法,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-06-06
  • 解析spring-boot-starter-parent简介

    解析spring-boot-starter-parent简介

    本文通过代码的形式给大家介绍了spring-boot-starter-parent的基础知识,需要的朋友可以参考下
    2018-09-09
  • Netty分布式pipeline管道创建方法跟踪解析

    Netty分布式pipeline管道创建方法跟踪解析

    这篇文章主要为大家介绍了Netty分布式pipeline管道创建方法跟踪解析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-03-03
  • 开放封闭原则_动力节点Java学院整理

    开放封闭原则_动力节点Java学院整理

    这篇文章主要介绍了开放封闭原则,开放-封闭原则是面向对象设计的核心所在,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-08-08
  • SpringCloud Zuul的使用简介

    SpringCloud Zuul的使用简介

    这篇文章主要介绍了SpringCloud Zuul的使用简介,帮助大家更好的理解和学习使用Spring Cloud,感兴趣的朋友可以了解下
    2021-04-04
  • SpringBoot项目接入MQTT的详细指南

    SpringBoot项目接入MQTT的详细指南

    MQTT是一种轻量级的消息传输协议,特别适用于物联网(IoT)场景,具有低带宽、高延迟网络环境下的优势,SpringBoot作为流行的 Java开发框架,能够方便地与MQTT集成,实现高效的消息通信,本文将详细介绍如何在SpringBoot项目中接入MQTT,需要的朋友可以参考下
    2025-03-03
  • Java纯代码实现导出PDF功能

    Java纯代码实现导出PDF功能

    在项目开发中,产品的需求越来越奇葩啦,开始文件下载都是下载为excel的,做着做着需求竟然变了,要求能导出pdf,本文就来和大家分享一下Java实现导出PDF的常用方法吧
    2023-07-07

最新评论