springboot 集成 Swagger3(速通)

news2024/11/25 5:43:44

→ springboot 集成 Swagger2 ←

目录

  • 1. 案例
  • 2. info 配置
  • 3. Docket 配置
    • 1. 开关配置
    • 2. 扫描路径
    • 3. 路径匹配
    • 4. 分组管理
  • 4. 常用注解
    • 1. 说明
    • 2. 案例

1. 案例

这次直接使用 2.5.6 的 spring-boot 。

  1. 依赖:

        <parent>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-parent</artifactId>
            <version>2.5.6</version>
            <relativePath/> <!-- lookup parent from repository -->
        </parent>
    
        <dependencies>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-web</artifactId>
            </dependency>
            <!--swagger3-->
            <dependency>
                <groupId>io.springfox</groupId>
                <artifactId>springfox-boot-starter</artifactId>
                <version>3.0.0</version>
            </dependency>
            
            <dependency>
                <groupId>org.projectlombok</groupId>
                <artifactId>lombok</artifactId>
                <optional>true</optional>
            </dependency>
        </dependencies>
    
  2. 启动类加注解 @EnableOpenApi

  3. 新建测试类

    @RestController
    @RequestMapping("/test")
    public class SwaggerController {
        @GetMapping("/get")
        public String getStr(String str) {
            return "SELECT " + str;
        }
    
        @PostMapping("/post")
        public String postStr(String str) {
            return "CREATE " + str;
        }
    
        @PutMapping("/put")
        public String putStr(String str) {
            return "UPDATE " + str;
        }
    
        @NoSwagger
        @PatchMapping("/patch")
        public String patchStr(String str) {
            return "UPDATE " + str;
        }
    
        @DeleteMapping("/delete")
        public String deleteStr(String str) {
            return "DELETE " + str;
        }
    }
    
  4. 访问 http://127.0.0.1:8080/swagger-ui.html ,没错,又是 Error 页面

此部分参考:https://blog.csdn.net/mmmm0584/article/details/117786055


在swagger3.0中,swagger-ui.html的位置发生了变化:
    
所以路径也变了:http://127.0.0.1:8080/swagger-ui.htmlhttp://127.0.0.1:8080/swagger-ui/index.html

  1. 访问 http://127.0.0.1:8080/swagger-ui/index.html

2. info 配置

新建一个配置类:

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import springfox.documentation.builders.ApiInfoBuilder;
import springfox.documentation.service.ApiInfo;
import springfox.documentation.service.Contact;
import springfox.documentation.service.VendorExtension;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spring.web.plugins.Docket;

import java.util.HashSet;

@Configuration
public class Swagger3Conf {
    @Bean
    public Docket createDocket() {
        return new Docket(DocumentationType.OAS_30)// 指定 Swagger3 版本号
                .apiInfo(createApiInfo());
    }

    @Bean
    public ApiInfo createApiInfo() {
//        // 写法一
//        return new ApiInfoBuilder()
//                .title("Swagger3 文档案例")
//                .description("Swagger :一套围绕 Open API 规范构建的一款 RESTful 接口的文档在线自动生成和功能测试 API 。")
//                .version("1.0.1")
//                .contact(
//                        // name url email
//                        new Contact("364.99°的文档", // 文档发布者名称
//                                "https://blog.csdn.net/m0_54355172", // 文档发布者的网站地址
//                                "2190826197@qq.com" // 文档发布者的邮箱
//                        )
//                )
//                .build();
        // 写法二
        return new ApiInfo(
                "Swagger3 文档案例",
                "Swagger :一套围绕 Open API 规范构建的一款 RESTful 接口的文档在线自动生成和功能测试 API 。",
                "1.0.1",
                "https://blog.csdn.net/m0_54355172",
                new Contact("364.99°的文档", // 文档发布者名称
                                "https://blog.csdn.net/m0_54355172", // 文档发布者的网站地址
                                "2190826197@qq.com" // 文档发布者的邮箱
                        ),
                "364.99°",
                "https://blog.csdn.net/m0_54355172",
                new HashSet<>());
        }
}

  • Docket Swagger 的实例,可通过 Docket 对象来配置 Swagger;
  • ApiInfo 文件描述的配置对象。

3. Docket 配置

1. 开关配置

    @Bean
    public Docket createDocket() {
        return new Docket(DocumentationType.OAS_30)// 指定 Swagger3 版本号
                .enable(false)// 关闭文档
                .apiInfo(createApiInfo());
    }

注意: 一般只有在测试环境才会用到 Swagger,在生产环境中会把它关闭掉,为了安全与效率。

2. 扫描路径

                .select()
                .apis(RequestHandlerSelectors.basePackage("com.chenjy.swagger2.controller"))
                .build()

3. 路径匹配

新建一个控制器:

@Api(tags = "other 接口 API")
@RestController
@RequestMapping("/other")
public class OtherController {
    @GetMapping("getInfo")
    public String getInfo() {
        return "information";
    }
}
                .select()
                .paths(PathSelectors.ant("/other/**"))
                .build()

4. 分组管理

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import springfox.documentation.builders.ApiInfoBuilder;
import springfox.documentation.builders.PathSelectors;
import springfox.documentation.builders.RequestHandlerSelectors;
import springfox.documentation.service.ApiInfo;
import springfox.documentation.service.Contact;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spring.web.plugins.Docket;

import java.util.HashSet;

@Configuration
public class Swagger3Conf {
    @Bean
    public Docket createDocket01() {
        return new Docket(DocumentationType.OAS_30)// 指定 Swagger3 版本号
                .groupName("other 组")
                .enable(true)// 关闭文档
                .select()
                .paths(PathSelectors.ant("/other/**"))
                .build()
                .apiInfo(createApiInfo());
    }

	@Bean
    public Docket createDocket02() {
        return new Docket(DocumentationType.OAS_30)
                .groupName("test 组")
                .select()
                .apis(RequestHandlerSelectors.basePackage("com.chenjy.swagger2.controller"))
                .build()
                .apiInfo(
                        new ApiInfoBuilder()
                                .title("Swagger3 文档案例")
                                .build()
                );
    }

    @Bean
    public ApiInfo createApiInfo() {
//        // 写法一
//        return new ApiInfoBuilder()
//                .title("Swagger3 文档案例")
//                .description("Swagger :一套围绕 Open API 规范构建的一款 RESTful 接口的文档在线自动生成和功能测试 API 。")
//                .version("1.0.1")
//                .contact(
//                        // name url email
//                        new Contact("364.99°的文档", // 文档发布者名称
//                                "https://blog.csdn.net/m0_54355172", // 文档发布者的网站地址
//                                "2190826197@qq.com" // 文档发布者的邮箱
//                        )
//                )
//                .build();
        // 写法二
        return new ApiInfo(
                "Swagger3 文档案例",
                "Swagger :一套围绕 Open API 规范构建的一款 RESTful 接口的文档在线自动生成和功能测试 API 。",
                "1.0.1",
                "https://blog.csdn.net/m0_54355172",
                new Contact("364.99°的文档", // 文档发布者名称
                                "https://blog.csdn.net/m0_54355172", // 文档发布者的网站地址
                                "2190826197@qq.com" // 文档发布者的邮箱
                        ),
                "364.99°",
                "https://blog.csdn.net/m0_54355172",
                new HashSet<>());
        }
}

4. 常用注解

1. 说明

和 Swagger2 一样,其常用注解还是如下几个:

常用注解注解说明常用属性属性说明
@Api类注解,常用来给文档中的控制器取别名tags别名
@ApiOperation方法/类注解,常用来描述方法value
notes
方法说明
方法备注
@ApiParam参数/方法/属性注解,常用来描述参数name
value
required
参数名
补充描述
是否必须
@ApiIgnore方法/属性注解,使被标注方法不生成文档--
@ApiImplicitParam方法注解,描述一个参数name
value
name
required
paramType
dataType
defaultValue
参数名
补充说明

是否必传
参数位置(header、query、path)
参数类型(默认 String)
默认值
@ApiImplicitParams搭配 @ApiImplicitParam 一起使用,描述一组参数
@ApiResponse方法注解,表达一个错误的响应信息code
message
response
整型
字符串
异常信息(默认 String 类型)
@ApiResponses搭配 @ApiResponse 一起使用,参考 @ApiImplicitParams
@ApiModel类注解,当此实体类被作为返回类型用于 API 帮助文档中的接口方法中,此注解被解析value
description
实体类名
补充描述
@ApiModelProperty属性注解,搭配 @ApiModel 使用value
example
hidden
属性名
示例
是否隐藏

2. 案例

import com.chenjy.swagger2.dto.TestDto;
import io.swagger.annotations.*;
import org.springframework.web.bind.annotation.*;
import springfox.documentation.annotations.ApiIgnore;

@Api(tags = {"test 接口 API"})
@RestController
public class SwaggerController {

    @ApiResponses({
            @ApiResponse(code = 1, message = "查询成功"),
            @ApiResponse(code = -1, message = "查询失败")
    })
    @ApiImplicitParams({
            @ApiImplicitParam(name = "name", value = "角色名", required = false, defaultValue = "张三"),
            @ApiImplicitParam(name = "num", value = "序列号", required = true)
    }
    )
    @PostMapping("/getInfo")
    public TestDto getInfo(String name, Integer num) {
        return new TestDto(name, num);
    }
    
    @ApiIgnore
    @GetMapping("/getStr")
    public String getStr(String name) {
        return name;
    }
}
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

@Data
@NoArgsConstructor
@AllArgsConstructor
@ApiModel( value = "角色实体类", description = "存储数据并返回")
public class TestDto {
    @ApiModelProperty( value = "姓名", example = "张三", hidden = false)
    private String name;
    @ApiModelProperty( value = "序列号", example = "1")
    private Integer num;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/566598.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

亏损?盈利?禾赛科技Q1财报背后的激光雷达赛道「现实」

随着禾赛科技在去年登陆美股&#xff0c;作为全球为数不多已经开始前装量产交付的激光雷达上市公司&#xff0c;财务数据的变化&#xff0c;也在一定程度上反映了行业的真实状况。 根据禾赛科技最新发布的今年一季度财报显示&#xff0c;公司季度净营收为4.3亿元&#xff08;人…

基于html+css的图展示91

准备项目 项目开发工具 Visual Studio Code 1.44.2 版本: 1.44.2 提交: ff915844119ce9485abfe8aa9076ec76b5300ddd 日期: 2020-04-16T16:36:23.138Z Electron: 7.1.11 Chrome: 78.0.3904.130 Node.js: 12.8.1 V8: 7.8.279.23-electron.0 OS: Windows_NT x64 10.0.19044 项目…

电表及配电监控系统的智能化发展

安科瑞虞佳豪 在电力领域&#xff0c;AI渗透率近年来也持续提升。今年3月&#xff0c;国家能源局发布《关于加快推进能源数字化智能化发展的若干意见》&#xff0c;文件中针对电力、、油气等行业数字化智能化转型&#xff0c;明确了指导思想和基本原则&#xff0c;从加快行业转…

Unity之ShaderGraph数据类型

前言 ShaderGraph是Unity引擎中的一个可视化着色器编辑器&#xff0c;它允许开发者使用节点和连接线的方式来创建自定义的着色器。使用ShaderGraph&#xff0c;开发者可以通过简单的拽和连接节点来创建复杂的着色器效果&#xff0c;而无需编写任何代码。 为了更好的学习Shader…

chatgpt赋能python:PythonWOL:简化计算机远程唤醒的一种方法

Python WOL&#xff1a;简化计算机远程唤醒的一种方法 随着人们越来越频繁地远程连接和控制计算机&#xff0c;计算机的远程唤醒功能变得越来越重要。WOL&#xff0c;即“Wake on LAN”&#xff0c;是一种使用网络信号远程唤醒计算机的技术。 在许多情况下&#xff0c;使用WO…

打家劫舍问题 Python题解

✅作者简介&#xff1a;人工智能专业本科在读&#xff0c;喜欢计算机与编程&#xff0c;写博客记录自己的学习历程。 &#x1f34e;个人主页&#xff1a;小嗷犬的个人主页 &#x1f34a;个人网站&#xff1a;小嗷犬的技术小站 &#x1f96d;个人信条&#xff1a;为天地立心&…

python 网络编程和http协议--网络编程,HTTP协议,Web服务器

一.网络编程 1.IP地址 给网络中的每一台设备进行编号. IPV4 IPV6 2.端口和端口号 端口的作用就是给运行的应用程序提供传输数据的通道。 端口号的作用是用来区分和管理不同端口的&#xff0c;通过端口号能找到唯一个的一个端口。 3.TCP协议 协议: 双方的约定. 网络传输协…

基于SpringBoot+微信小程序的点餐系统

✌全网粉丝20W,csdn特邀作者、博客专家、CSDN新星计划导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取项目下载方式&#x1f345; 一、项目背景介绍&#xff1a; 小程序外卖扫码点餐为…

【MQTT】关于部署含有MQTT协议的程序pod到K8S中出现的问题

1、如何在go-zero整合MQTT协议 整合EMQX与eclipse/paho.mqtt.golang实现TLS&#xff08;ssl&#xff09;单向认证 订阅、发布、解压缩gzip、zlib数据报文 https://ctraplatform.blog.csdn.net/article/details/130525974 1.1 、通过钩子函数一直出现Lost问题排查 场景&#xff…

人类睡眠EEG分析:附代码实现的方法学入门

导读 近年来&#xff0c;人类睡眠脑电图(EEG)研究激增&#xff0c;采用了越来越复杂的分析策略将电生理活动与认知和疾病联系起来。然而&#xff0c;正确计算和解释当代睡眠EEG中使用的指标需要注意许多理论和实际的信号处理细节。本研究回顾了与频谱分析、蒙太奇选择、相位和…

VC GDI双缓冲绘图

VC GDI双缓冲绘图 VC GDI双缓冲绘图创建内存DC和内存图片&#xff0c;缺一不可最好是封装一下内存绘制绘制效果 关键是不闪烁PS 重绘机制 VC GDI双缓冲绘图 双缓冲绘图&#xff0c;知道这个知识点&#xff0c;每次用的时候还得踩一遍坑&#xff0c;真是服&#xff0c;总结记录…

BGP实验--联邦以及反射器

实验明细 实验拓扑实验要求实验内容 实验拓扑 实验要求 1.R2-R7每台路由器均存在一个环回接口用于建立邻居&#xff1b;同时还存在一个环回来代表连接用户的接口&#xff1b;最终这些连接用户的接口网络需要可以和R1/8的环回通讯 2.AS2网段地址为172.16.0.0/16&#xff0c;减少…

【开源项目】ShenYu网关中Disruptor的使用

模块封装 shenyu-disruptor定义了DisruptorProvider、DisruptorProviderManage、DataEvent、QueueConsumerFactory、DisrutporThreadFactory等一系列通用接口 该模块的搭建了一个disruptor的初始化框架&#xff0c; DisruptorProviderManage提供Disruptor的初始化&#xff0c;…

分布式事务的21种武器 - 4

在分布式系统中&#xff0c;事务的处理分布在不同组件、服务中&#xff0c;因此分布式事务的ACID保障面临着一些特殊难点。本系列文章介绍了21种分布式事务设计模式&#xff0c;并分析其实现原理和优缺点&#xff0c;在面对具体分布式事务问题时&#xff0c;可以选择合适的模式…

软件设计师数据结构速过

加法规则&#xff1a;多项相加&#xff0c;保留最高阶项&#xff0c;并将系数化为 1 乘法规则&#xff1a;多项相乘都保留&#xff0c;并将系数化为 1 加法乘法混合规则&#xff1a;先小括号再乘法规则最后加法规则 时间复杂度估算看最内层循环&#xff0c;如若没有循环和递归则…

终于!我们把 CEO 炒了,让 ChatGPT 出任 CEO

⚠️ FBI Warning&#xff1a;本文纯属作者自娱自乐&#xff0c;数字人的观点不代表 CEO 本人的观点&#xff0c;请大家不要上当受骗&#xff01;&#xff01; 哪个公司的 CEO 不想拥有一个自己的数字克隆&#xff1f; 想象&#x1f914;一下&#xff0c;如果 CEO 数字克隆上线…

【初识django】——django——如桃花来

目录索引 django引入&#xff1a;常见的web框架&#xff1a;下载问题&#xff1a;*下载Django之前确保工具不会发生版本问题*下载django:*检查是否下载成功&#xff1a;**注意事项&#xff1a;* 创建django项目&#xff1a;在cmd中创建&#xff1a;*整个命令流程&#xff1a;**…

React学习笔记六-refs

此文章是本人在学习React的时候&#xff0c;写下的学习笔记&#xff0c;在此纪录和分享。此为第六篇&#xff0c;主要介绍react中的refs。 目录 1.refs基本使用 1.1字符串类型ref小案例 2.回调形式的ref 2.1回调形式ref小案例 2.2回调ref中调用次数问题 3.createRef 3.…

SpringBoot 插件 spring-boot-maven-plugin 原理,以及SpringBoo工程部署的 jar 包瘦身实战

spring-boot-maven-plugin 我们直接使用 maven package &#xff08;maven自带的package打包功能&#xff09;&#xff0c;打包Jar包的时候&#xff0c;不会将该项目所依赖的Jar包一起打进去&#xff0c;在使用java -jar命令启动项目时会报错&#xff0c;项目无法正常启动。这…

TOP RPA·脱普×实在丨日用品企业脱普签约实在智能,构建全域数据智能运营系统

近日&#xff0c;实在智能与脱普日用化学品&#xff08;中国&#xff09;有限公司&#xff08;简称“脱普企业”&#xff09;在脱普企业上海总部举行“全域数据智能运营”项目启动会&#xff0c;双方领导及项目组关键成员共同参会&#xff0c;就项目目标、实施进程、沟通机制等…