Swagger-springDoc使用教程

本文介绍如何使用Swagger-doc1.5.x版本搭建API文档系统,包括依赖配置、配置类编写、常用注解说明及实体类和返回类的设计等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Swagger-doc 1.5.x部署

1.依赖

        <!--swagger-ui-->
        <dependency>
            <groupId>org.springdoc</groupId>
            <artifactId>springdoc-openapi-ui</artifactId>
            <version>1.5.12</version>
        </dependency>

2.配置类

import io.swagger.v3.oas.models.Components;
import io.swagger.v3.oas.models.OpenAPI;
import io.swagger.v3.oas.models.info.Contact;
import io.swagger.v3.oas.models.info.Info;
import io.swagger.v3.oas.models.info.License;
import io.swagger.v3.oas.models.security.SecurityRequirement;
import io.swagger.v3.oas.models.security.SecurityScheme;
import org.springdoc.core.GroupedOpenApi;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;


/**
 * springDoc-swagger标准配置
 *
 * @author huang cheng
 * 2021/8/13
 */
@Configuration
public class SpringDocSwaggerConfig {

    private static final String basePackage = "com.cheng.sunnyday.controller";//需要扫描api路径
    private static final String headerName = "Authorization";//请求头名称

    @Bean
    public GroupedOpenApi usersGroup() {
        return GroupedOpenApi.builder()
                .group("users")
                .addOperationCustomizer((operation, handlerMethod) -> {
                    operation.addSecurityItem(new SecurityRequirement().addList(headerName));
                    return operation;
                })
                .packagesToScan(basePackage)
                .build();
    }

    @Bean
    public OpenAPI customOpenAPI() {
        Components components = new Components();
        //添加右上角的统一安全认证
        components.addSecuritySchemes(headerName,
                new SecurityScheme()
                        .type(SecurityScheme.Type.APIKEY)
                        .scheme("basic")
                        .name(headerName)
                        .in(SecurityScheme.In.HEADER)
                        .description("请求头")
        );

        return new OpenAPI()
                .components(components)
                .info(apiInfo());
    }

    private Info apiInfo() {
        Contact contact = new Contact();
        contact.setEmail("1003816735@qq.com");
        contact.setName("cheng");
        contact.setUrl("https://blog.csdn.net/qq_42495847?spm=1000.2115.3001.5343");
        return new Info()
                .title("sunnyDay-swagger文档")
                .version("1.0")
                .contact(contact)
                .description("博客请关注:https://blog.csdn.net/qq_42495847?spm=1000.2115.3001.5343")
                .license(new License().name("Apache 2.0").url("http://springdoc.org"));
    }

}
  • ApiKey是对请求的header进行设置,第一、二个参数是header的key,第三个参数是用户输入

3.常用注解

springdoc基于swagger3注解

swagger2swagger3注解位置
@Api(tags = “接口类描述”)@Tag(tags = “接口类描述”)Controller 类上
@ApiOperation(“接口方法描述”)@Operation(summary =“接口方法描述”)Controller 方法上
@ApiImplicitParams@ParametersController 方法上
@ApiImplicitParam@Parameter(description=“参数描述”)Controller 方法上 @Parameters 里
@ApiParam(“参数描述”)@Parameter(description=“参数描述”)Controller 方法的参数上
@ApiIgnore@Parameter(hidden = true) 或 @Operation(hidden = true) 或 @Hidden-
@ApiModel(description = “dto类描述”)@Schema(description = “dto类描述”)DTO类上
@ApiModelProperty(“属性描述”)@Schema(description = “属性描述”)DTO属性上

4.实体类

@Data
@Schema(description ="日记更新参数")
public class JournalUpdateDto {

    @Schema(description ="日记id")
    @NotBlank(message = "日记id不能为空")
    private String id;

    /**
     * 日记内容
     */
    @Schema(description ="日记内容")
    @NotBlank(message = "日记内容不能为空")
    private String content;

    /**
     * 标签
     */
    @Schema(description ="标签")
    private String label;

}

5.统一返回类

/**
 * 通用返回类型
 */
@Data
@AllArgsConstructor
@NoArgsConstructor
public class CResponse<T> implements Serializable {

    private static final long serialVersionUID = 1L;
    private String code;//状态码
    private String message;//文字描述
    private T data;//数据

    public CResponse(String code, String message) {
        this(code,message,null);
    }

}

6.控制层

import com.cheng.sunnyday.common.constant.SecurityConstant;
import com.cheng.sunnyday.pojo.system.UserInfo;
import com.cheng.sunnyday.pojo.dto.LoginDto;
import com.cheng.sunnyday.pojo.dto.RegisterDto;
import com.cheng.sunnyday.common.http.CResponse;
import com.cheng.sunnyday.pojo.vo.TokenVo;
import com.cheng.sunnyday.service.LoginService;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.tags.Tag;
import org.springframework.web.bind.annotation.*;

import javax.annotation.Resource;
import javax.validation.Valid;

/**
 * 用户登录控制
 *
 * @author huang cheng
 * 2021/8/11
 */
@Tag(name = "权限管理")
@RestController
@RequestMapping("/auth")
public class LoginController {

    @Resource
    private LoginService loginService;

    @Operation(summary = "注册")
    @PostMapping("/register")
    public CResponse<TokenVo> register(@RequestBody @Valid RegisterDto registerDto) {
        return loginService.register(registerDto);
    }

    /**
     * 获取token 并更新/插入用户信息
     *
     * @param loginDto 传入该用户可获取到的用户信息
     * @return token 放到Header中的Authorization作为值
     */
    @Operation(summary = "得到token")
    @PostMapping("/getToken")
    public CResponse<TokenVo> getToken(@RequestBody @Valid LoginDto loginDto) {
        return loginService.getToken(loginDto);
    }

    /**
     * 得到当前token中包含的用户信息
     *
     * @param token 令牌
     * @return 用户信息
     */
    @Operation(summary = "得到当前token中包含的用户信息")
    @PostMapping("/getUserInfo")
    public CResponse<UserInfo> getUserInfo(@Parameter(description = "请求头:Authorization") @RequestHeader(SecurityConstant.TOKEN_HEADER) String token) {
        return loginService.getUserInfo(token);
    }


}

7.控制器放行地址

如果有spring-Security或者拦截器过滤器之类的配置,需要对以下地址进行放行

    /**
     * 放行Swagger
     */
    public static final String[] SWAGGER_WHITELIST = {
            "/swagger-ui.html",
            "/swagger-ui/**",
            "/swagger-resources/**",
            "/v2/api-docs",
            "/v3/api-docs",
            "/v3/api-docs/swagger-config",
            "/webjars/**",
            "/doc.html",
    };

8.启动

访问localhost:8080/swagger-ui.html

image-20211119144844054

基本功能就ok了
深度功能请访问官网文档:springdoc文档

<think>好的,用户想要查找关于Springdoc使用教程、指南和示例。我需要根据提供的引用内容来组织回答。首先,用户提到的三个引用都与Springdoc相关,特别是如何在不同的Spring项目中使用它。 首先,引用[1]提到了Springdoc OpenAPI Gradle插件的使用教程,这可能涉及到如何通过Gradle集成Springdoc。引用[2]讨论了在Spring Cloud Gateway中集成SpringDoc,特别是处理微服务的API文档聚合。引用[3]则介绍了在Spring Boot 3.x中使用SpringDoc和Knife4j的迁移指南,因为Swagger 2不再被支持。 接下来,我需要将这些信息整理成结构清晰的步骤。可能需要分为基础配置、与网关的集成、UI工具的使用以及插件应用等部分。每个部分需要简明扼要地说明步骤,并引用对应的来源。例如,基础配置部分会提到添加Maven依赖和配置OpenAPI,引用[3];网关集成需要说明路由配置和文档聚合,引用[2];Knife4j部分涉及UI增强,引用[3];Gradle插件则来自引用[1]。 然后,生成相关问题时要确保问题覆盖用户可能关心的其他方面,比如版本兼容性、安全配置、不同工具的对比等。需要确保问题与提供的引用内容相关,这样用户能找到答案。 最后,检查所有回答是否符合格式要求,特别是LaTeX语法是否正确,不过在这个主题中可能用不到数学公式,所以可能不需要使用$...$或$$...$$格式。但需要确保没有违反其他规则,比如使用中文,正确引用标识等。</think>### Springdoc 使用指南及示例 #### 一、基础配置与快速入门 1. **添加依赖** 在 Spring Boot 3.x 项目中,需通过 Maven 或 Gradle 引入 `springdoc-openapi-starter-webmvc-ui`: ```xml <!-- Maven 示例 --> <dependency> <groupId>org.springdoc</groupId> <artifactId>springdoc-openapi-starter-webmvc-ui</artifactId> <version>2.2.0</version> </dependency> ``` 启动后访问 `http://localhost:8080/swagger-ui.html` 即可查看 API 文档[^3]。 2. **配置 OpenAPI 元信息** 在 `application.yml` 中自定义文档信息: ```yaml springdoc: swagger-ui: path: /api-docs api-docs: path: /v3/api-docs default-consumes-media-type: application/json ``` #### 二、Spring Cloud Gateway 集成 若需在网关聚合多个微服务的 API 文档: 1. **添加依赖** 引入 `springdoc-openapi-starter-webflux-ui`(需适配响应式编程): ```xml <dependency> <groupId>org.springdoc</groupId> <artifactId>springdoc-openapi-starter-webflux-ui</artifactId> <version>2.2.0</version> </dependency> ``` 2. **配置路由规则** 在网关中定义各微服务的文档路径映射: ```yaml spring: cloud: gateway: routes: - id: user-service-docs uri: lb://user-service predicates: - Path=/v3/api-docs/user-service/** filters: - RewritePath=/v3/api-docs/user-service/(?<path>.*), /$\{path}/v3/api-docs ``` 最终通过网关统一访问所有服务的文档[^2]。 #### 三、Knife4j 增强 UI 为替换默认的 Swagger UI,可通过 Knife4j 优化界面: 1. **添加依赖** ```xml <dependency> <groupId>com.github.xiaoymin</groupId> <artifactId>knife4j-openapi3-jakarta-spring-boot-starter</artifactId> <version>4.4.0</version> </dependency> ``` 2. **访问地址** 文档界面变更为 `http://localhost:8080/doc.html`,支持离线文档导出。 #### 四、Gradle 插件应用 对于使用 Gradle 的项目,可通过插件简化配置: ```groovy plugins { id &#39;org.springdoc.openapi-gradle-plugin&#39; version &#39;1.8.0&#39; } openApi { apiDocsUrl = "http://localhost:8080/v3/api-docs" outputDir = file("$buildDir/docs") } ``` 运行 `gradle generateOpenApiDocs` 生成静态文档[^1]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值