微服务: Swagger 实现在线文档自动化

Swagger:在线接口文档 介绍使用Swagger你只需要按照它的规范去定义接口及接口相关的信息,就可以做到生成接口文档,以及在线接口调试页面。是为Java MVC框架集成Swagger生成Api文档的增强解决方案。使用方式1.导入knife4j的maven坐标2.在配置类中加入knife4j 相关配置设置静态资源映射,否则接口文档页面无法访问3.接口文档的访问路径:例如我的tomcat服务器的端口号为8080,同时在本地运行,访问的路径就为。 阅读详情

原文 微服务: Swagger让你可以多抽一支烟,优快云同步发布。

转载请注明出处,谢谢!


简介

Swagger,可用于生成、描述、调用和可视化 RESTful 风格接口的API,是一套规范和完整的开发框架,并且能对接口进行单独测试。

另外, Swagger 在 Github 上面是开源的。

无论对于后端开发,还是前端开发以及测试同事,Swagger 都可以基本满足使用需求。

在 SpringBoot 中集成 Swagger,后端同事写完接口就可以自动生成API文档,可以给到前端同事看,测试同事可以直接测试该接口。

在本篇中,跟大家分享如下内容:

1、在 SpringBoot 中项目如何集成 Swagger?

2、如何使用 Swagger,如何在不同的环境中开启和关闭 Swagger?

3、如何将同类的接口使用 Swagger 注解进行聚合?

更多关于 SpringBoot 的文章,可以点击 微服务项目系列文章 了解,完整代码示例请前往 Github 查看。

集成 Swagger

在 MavenEwpository 搜索 Springfox,可以找到 Swagger2 和 Swagger UI,如图所示。

截止到目前, Swagger2 和 Swagger UI 最新版本是 2.9.2 版本。

修改工程的pom文件,增加 Swagger2 和 Swagger UI 的依赖,如下:

<!--swagger-->
<dependency>
    <groupId>io.springfox</groupId>
    <artifactId>springfox-swagger2</artifactId>
    <version>2.9.2</version>
</dependency>
<dependency>
    <groupId>io.springfox</groupId>
    <artifactId>springfox-swagger-ui</artifactId>
    <version>2.9.2</version>
</dependency>

因为我的项目已经集成了 starter-web,如下 pom 文件中的 dependency:

<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-web</artifactId>
</dependency>

这样默认会集成 com.fasterxml.jackson.core: 相关的库,不需要额外再去集成 jackson-databind 了,如下图所示:

否则你需要单独增加 jackson-databind 的依赖,同样的道理你可以在 MavenEwpository 搜索 jackson-databind 选择合适的版本即可。

<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-databind</artifactId>
    <version>2.9.8</version>
</dependency>

工程已经集成了 Swagger,接下来我们看看如何使用。

使用 Swagger

1、创建Swagger配置

新建一个配置类 MSSwaggerConfig,该文件名称和位置你可以放到你的工程的任意目录,根据自己的项目目录来放置即可。

MSSwaggerConfig 示例代码如下:

@Configuration
@EnableSwagger2
public class MSSwaggerConfig {

    @Bean
    public Docket msblogDocket() {
        Docket docket = new Docket(DocumentationType.SWAGGER_2);
		String pkgName = "com.veryitman.springboot.controller";
        return docket.apiInfo(msblogAPIInfo()).select()
                .apis(RequestHandlerSelectors.basePackage(pkgName))
                .paths(PathSelectors.any())
                .build();
    }

    private ApiInfo msblogAPIInfo() {
        ApiInfoBuilder apiInfoBuilder = new ApiInfoBuilder();
        String apiTitle = "MSBlog Server API";
        String apiDes = "API for MSBlog";
        String apiVersion = "1.0.0";
        String homePage = "http://veryitman.com";
        String emailUrl = "veryitman@126.com";
        Contact contact = new Contact("itman", homePage, emailUrl);
        return apiInfoBuilder.title(apiTitle).description(apiDes)
                .version(apiVersion)
                .contact(contact)
                .license("Apache 2.0")
                .licenseUrl("http://www.apache.org/licenses/LICENSE-2.0.html")
                .build();
    }
}

记得添加 @Configuration、 @EnableSwagger2 这两个注解。

对于 apis(RequestHandlerSelectors.basePackage(pkgName)) 目的是只扫描指定包名下面 Controller 的 Swagger 注解,这样就不会去扫描其他包下面的类了。

对于这个配置类,主要是用来生成一些摘要信息,如图:

2、注解 Controller

在 微服务-简单的用户名注册和登录 给大家分享了如何写注册和登录的API,今天还是拿注册的例子来进行 Swagger 的演示。

下面代码是用户注册的示例代码。

@RestController
@RequestMapping(value = "signup")
public class MSSignupController {

    @CrossOrigin(origins = {"*"})
    @PostMapping(value = "/name")
    @ApiOperation(value = "用户注册", httpMethod = "POST", notes = "用户名和密码注册")
    @ApiImplicitParams({
        @ApiImplicitParam(name = "username", value = "注册的用户名", required = true),
        @ApiImplicitParam(name = "userpwd", value = "注册的密码", required = true)
    })
    public MSResponse signup(@RequestParam(value = "username") String userName, @RequestParam(value = "userpwd") String userPwd) {
       // 省略
    }
}

可以看到如下的注解:

@ApiOperation(value = "用户注册", httpMethod = "POST", notes = "用户名和密码注册")
@ApiImplicitParams({
    @ApiImplicitParam(name = "username", value = "注册的用户名", required = true),
    @ApiImplicitParam(name = "userpwd", value = "注册的密码", required = true)
})

这些注解就是 Swagger 的注解,@ApiOperation 说明了该接口的用途,@ApiImplicitParams 中有两个 @ApiImplicitParam 用来对接口的参数进行说明。

如果接口只有一个参数,可以直接使用 @ApiImplicitParam 注解即可。

3、在线文档

配置完成之后,可以启动 SpringBoot 项目,在浏览器中打开下面地址,就可以看到生成的在线文档了。

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


点击对应的 Controller 就可以看到对应接口的详细说明了,并且还可以对接口进行测试。

分环境开启 Swagger

在实际项目中,我们一般只会在开发和测试环境使能 Swagger,在沙盒和生成环境会关闭 Swagger,那如何控制呢?

在工程的 Resources 目录下面,新建几个跟环境相关的 properties 文件。

这些文件的命令要满足 application-{profile}.properties 的格式,其中 {profile} 你可以自定义名字,如下我自定义了4个环境,分别是开发、生产、沙盒和测试环境。

我们知道,在 application-{profile}.properties 中配置的选项与在 application.properties 中配置的选项如果名称相同,优先会使用 application-{profile}.properties 中配置。

在 application.properties 中配置如下:

# 配置使用哪个环境
spring.profiles.active=dev
# 默认不启用 swagger
swagger.enable=false

对应的在 application-dev.properties 和 application-test.properties 中开启 swagger,如下:

# 启用 swagger
swagger.enable=true

选项配置完成后,我们在代码中使用该选项,修改 MSSwaggerConfig 如下(只列出了修改部分的关键代码):

@Configuration
@EnableSwagger2
public class MSSwaggerConfig {

    @Value("${swagger.enable}")
    private boolean enableSwagger;

    @Bean
    public Docket msblogDocket() {
        Docket docket = 
        	new Docket(DocumentationType.SWAGGER_2).enable(enableSwagger);
		String pkgName = "com.veryitman.springboot.controller";
        return docket.apiInfo(msblogAPIInfo())
                .select()
                // 只扫描指定包名下面的Controller中的Swagger注解
                .apis(RequestHandlerSelectors.basePackage(pkgName))
                .paths(PathSelectors.any())
                .build();
    }

在下面的代码中读取配置

@Value("${swagger.enable}")
private boolean enableSwagger;

然后调用 Docket 的 enable(enableSwagger) 方法来决定是否开启 Swagger,如果配置不开启,效果图如下:

还有其他方式来控制在不同环境下配置 Swagger 是否开启,比如可以结合注解 @Profile 通过不同的 profile 给 Swagger 的依赖设置不同的 scope,还可以使用注解 @ConditionalOnProperty(name = "swagger.enable", havingValue = "true"),大家自行选择适合自己项目的方案即可,目的都是一样。

聚合接口

在上面实例中,我们可以看到登录和注册都属于用户模块,使用注解 @API 可以聚合显示这些接口。

在登录和注册的 Controller 中可以添加下面注解,从而来聚合显示接口。

@Api(value="xxx", tags="用户模块")

注册 Controller 添加注解,如下:

@Api(value="signup", tags="用户模块")
@RestController
@RequestMapping(value = "signup")
public class MSSignupController {
}

登录 Controller 添加注解,如下:

@Api(value="signin", tags="用户模块")
@RestController
@RequestMapping(value = "signin")
public class MSSigninController {
}

显示效果如下:

你眼睛看到的不一定是事实的全部~

在线文档生成:Swagger 现在的项目开发都是前后端分离,前端和后端是两拨人在开发,所以这就涉及到前后端人员的接口交互了。如果使用自己维护的接口文档或口口相传的话,很容易出现接口更新不及时的问题。这个时候就需要像Swagger这样的在线文档生成框架出马了。更新接口信息并重新部署后,接口文档也会随之更新,同时Swagger也支持在线的接口调试功能。 阅读详情

相关推荐

swagger实现在线接口文档

我这里使用的是SpringFox,它是 spring 社区维护的一个非官方的开源的API Doc的框架,Marty Pitt编写了一个基于Spring的组件swagger-springmvc,用于将swagger集成到springmvc中来, 它的前身是swagger-springmvc,可以将我们的Controller中的方法以文档的形式展现。SpringFox 3.0.0 发布(突破性的变更版本),支持OpenApi 3.0.3,有springboot的整合的starter,使用更便捷。

高山仰止,景行行止 1841

Swagger2 和 Swagger3在线文档的使用

Swagger2和Swagger2在线文档的学习 1. Swagger2的学习:Swagger不兼容JDK9以上;因为Swagger依赖javax这个包,JDK9以上的javax包变成了jakarta包; 2. Swagger3的学习

茶碗儿 2250

SpringBoot + SpringCloudGateway + Swagger + knife4j实现文档自动化生成

SpringBoot + SpringCloudGateway + Swagger + knife4j 1.什么是OpenAPI 随着互联网技术的发展,现在的网站架构基本都由原来的后端渲染,变成了:前端渲染、前后端分离的形态,而且前端技术和后端技术在各自的道路上越走越远。 前端和后端的唯一联系,变成了API接口;API文档变成了前后端开发人员联系的纽带,变得越来越重要。 没有API文档工具之前,大家都是手写API文档的,在什么地方书写的都有,而且API文档没有统一规范和格式,每个公司都不一样。这无疑给开发

shengshenglalalala的博客 1286

在线接口调试工具-Swagger:展示API文档并进行接口测试

3)在启动类上加注解**@EnableWebMvc**6)展示API文档并进行接口测试。

m0_49808352的博客 2335

微服务之整合Swagger接口文档

微服务之整合Swagger接口文档Maven依赖配置网关配置Swagger网关依赖依赖配置swagger配置文件 -- configSwagger过滤器 -- filterSwagger控制层 -- handler配置文件yaml子系统对接网关接口文档配置文件 -- yaml接口使用Swagger注解Swagger配置说明配置启动类 Maven依赖配置 <dependency> ...

qq_20376983的博客 2077

微服务中整合Swagger2接口框架

在SpringCloud+SpringBoot微服务架构开发模式中,我们通常使用前后端分离的方式进行开发。前后端分离的方式使得接口数据成为前端开发人员与后端开发人员的沟通一种必要方式。Swagger ui 是一个API在线文档生成和测试的利器,在某种程度上可以媲美postman。作为后端开发人员来说可能会更倾向于使用postman来调试接口,但是作为前端人员了解后台接口数据,Swa...

qq_39660344的博客 7032

Swagger在线离线文档详解

swagger生成word文档,swagger各个注解的用法,swagger不显示类中类

菜菜小菠菠的博客,专注于后端技术 3106

微服务swagger解析部署使用全流程

swagger是一个在线接口说明文档,在代码中通过注解的方式将说明问题集成到项目,代码发生修改,说明文档同步修改,前后台联调可以快速同步数据。

m0_71240584的博客 2120

SpringCloud之使用Swagger生成微服务中API文档

随着微服务架构体系的发展和应用, 为了前后端能够更好的集成与对接,同时为了项目的方便交付,每个项目都需要提供相应的API文档。 来源:PC端、微信端、H5端、移动端(安卓和IOS端)   传统的API文档编写存在以下几个痛点: 对API文档进行更新的时候,需要通知前端开发人员,导致文档更新交流不及时; API接口返回信息不明确 大公司中肯定会有专门文档服务器对接口文档进行更新。 缺乏...

kxj19980524的博客 5146

从0到1带大家搭建spring cloud alibaba 微服务大型应用框架(十五) swagger篇 : gateway 集成swagger 与 knife4j实现在线api文档并嵌入到自己项目内

从0到1手把手搭建spring cloud alibaba 微服务大型应用框架(十五) swagger篇 : gateway 集成swagger 与 knife4j实现在线api文档并嵌入到自己项目内 #### 本文就来介绍如何微服务下通过gateway集成共通的api在线文档,这样就不需要一个服务去部署一套文档 #### 我们自定义注解实现swagger 自动集成到各个业务端并且通过knife4j 将swagger的文档更进一步美化并嵌入到我们自己的项目中 #### 集成后效果如下: ### 演示效果与介

峡谷电光马仔的博客 1684

【微服务】springboot整合swagger多种模式使用详解

springboot整合swagger多种模式使用详解

congge_study的博客 6264

Spring Gateway聚合Swagger在线文档

Spring Gateway聚合Swagger在线文档为什么需要聚合?如何聚合?单个服务如何聚合Swagger?1.添加依赖2.基础配置类3.Swagger文档信息装配类4.微服务添加引用5.微服务添加配置网关如何聚合Swagger?1.添加依赖2.实现资源接口SwaggerResourcesProvider3.重写ApiResourceController接口类 为什么需要聚合?   微服务模块众多,如果不聚合文档,则访问每个服务的API文档都需要单独访问一个Swagger UI界面,这么做客户端能否接受

Eddy的博客 1476

RK3576处理器RT-Thread与Linux混合部署实现工业EtherCAT实时控制

实时操作系统(RTOS)是工业自动化领域的核心技术,通过精确的任务调度和中断响应机制确保微秒级控制精度。RT-Thread作为开源实时系统,采用优先级抢占式调度算法,能够满足运动控制和总线通信的硬实时需求。在工业显控一体设备中,实时系统需要与富应用系统协同工作,Linux系统负责图形界面和网络通信等非实时任务。混合部署架构通过共享内存和核间通信技术实现数据交换,既保证了实时性能又扩展了应用生态。EtherCAT工业以太网协议作为高性能现场总线,采用主从站结构和分布式时钟同步,可实现多轴运动控制的精确同步。R

weixin_33738982的博客 2627

Swagger在线文档美化_进阶_微服务_网关整合版_v1.0.0

配置 网关聚合微服务Swagger在线文档 配置步骤 节选 在网关引入Maven依赖xml 问题 接口路由有误,需添加网关路由路径 接口路径错误,请求不到数据: 正确的路径是:

般若 1737

电脑蓝牙与ESP32蓝牙连接,让电脑发现ESP32

让PC发现ESP32蓝牙

injre! injre~ 5451

鸿蒙设备部署轻量级Web服务器NexServer实践

Web服务器作为互联网基础设施的核心组件,其轻量化部署在移动终端领域具有重要实践价值。本文以鸿蒙操作系统为技术载体,深入解析微内核架构如何通过资源隔离和分布式软总线实现服务高可用。重点探讨NexServer这一专为嵌入式场景设计的轻量级服务器,其ARM原生支持特性与15MB级内存占用,在HTTP/2协议处理与WebSocket通信中展现出独特优势。在智能家居控制面板、边缘计算节点等物联网典型场景中,鸿蒙设备结合NexServer的方案相比传统Nginx部署可降低60%资源消耗。通过实测数据对比,该组合在50

weixin_30411239的博客 484

❤️《微服务开发—Swagger》(建议收藏)

Swagger 文章目录Swagger1、Swagger的作用和概念1、Swagger 的优势2、SwaggerUI 特点2、SpringBoot集成Swagger3、配置Swagger4、实体配置5、其他皮肤 1、Swagger的作用和概念 ​ 官方地址:https://swagger.io/ ​ Swagger 是一个规范且完整的框架,用于生成、描述、调用和可视化 RESTful 风格的 Web 服务以及 集成Swagger自动生成API文档。 ​ Swagger 的目标是对 REST API 定义

... 1506

Python 爬虫进阶技巧:定时爬虫任务实现无人值守采集

常规爬虫多依赖手动触发脚本运行,单次采集完成后需人工二次启动,无法满足日常周期性数据监控、行情抓取、资讯同步、业务台账定时归档等常态化采集需求。搭建可自主调度、自动启停、周期循环的定时爬虫任务,脱离人工干预实现无人值守全自动采集,是爬虫从临时脚本走向工程化落地的关键一步。schedule 轻量定时库官方文档APScheduler 高级定时框架官方文档Python time 内置模块官方文档Linux crontab 定时任务官方手册。

2503_91057718的博客 1121

基于Swagger的接口自动化测试!

本文是一篇讲述我司云原生微服务与服务接口(API)自动化测试实现的文章、前半部分主要简单介绍Swagger的基本使用方法,中后部分也就是本文的重点议题:Swagger如何与自动化测试之道结合应用,最后根据整体的实现情况,提出一些注意事项,也就算是欲加理想实现,自要约束规范

m0_47485438的博客 1213

Matlab实现雷达波位编排

1 简介 %本程序用于雷达球坐标系到正弦空间坐标系的转换,以及相控阵雷达的波位编排。 2 完整代码 ​%070228添加波位数据保存clear allclose allclc%波束宽度,单位:度BeamWidth = 3.6;theta05 = round(sin(BeamWidth*pi/180)*1000)/1000;%雷达作用空域AZ = [-15 15]; %方位角范围(雷达球坐标系),单位:度EL = [0 30]; %俯仰角范围(雷

qq_59747472的博客 2480

linux驱动由浅入深系列:块设备驱动之一(高通eMMC分区实例)

linux驱动由浅入深系列:块设备驱动之一(高通eMMC分区实例)linux驱动由浅入深系列:块设备驱动之二(块设备驱动结构分析)块设备驱动的模型还是基本基于字符设备驱动的,可以简单理解为块设备仅仅增加了操作缓冲区,对用户请求顺序进行队列重拍等等。字符设备驱动的相关分析可以查看本博客相关的博文。 按照本博客的行文习惯,在具体分析块设备驱动代码之前,我们会从整体上了解一下研究对象的特征,以及用户空间...

Radia的专栏 1万+

微服务: Swagger生成Markdown文档

原文 Swagger生成Markdown文档,优快云同步发布。 转载请注明出处,谢谢! 国庆放假期间,看了一部 2018年上映的电影 《本杰明.巴顿奇事》,豆瓣评分 8.9。影片讲述了一出生便拥有80岁老人形象的本杰明·巴顿,随着岁月的推移逐渐变得年轻,最终回到婴儿形态,并在苍老的恋人黛茜怀中离世的奇异故事。 如果没有看过的小伙伴,推荐大家去看看,里面有很多关于人生的哲理。 本次文章封面图来...

CodingMan 7382

数字电路逻辑与设计实验三 译码器和数据选择器

1. 译码器功能测试 将 74LS139 按图 3.1 接线,按表 3.2 输入电平分别置位,填输出状态表。 2. 译码器转换 将双 2-4 线译码器转换为 3-8 线译码器。 (1)画出转换电路图。 (2)在实验箱上接线并验证设计是否正确。 (3)设计并填表写该 3-8 线译码器功能表,画出输入、输出波形。 3. 数据选择器的测试及应用 (1) 将双 4 选 1 数据选择器 74LS153 参照图 3.2 接线,测试其功能并填写功能表 3.3。 (2)将实验箱脉冲信号源中固定连续脉冲 4 个不

欢迎交流学习心得 3088

基于Swagger的接口自动化测试

原始时代,可能在工程开发前夕,会去创建接口文档,或者去修改前辈的接口文档。日复一日的你,肯定会有遗漏,那就是忘记维护接口文档(PS:忘记写文档就扣工资?)近现代,你可以用Swagger自动帮你生成接口文档(是不是很神奇?)这就是技术的进步!但是!你必须要遵守他的规范(一提规范就头大)!Swagger 接口项目Swagger 接口管理Swagger 测试用例顾名思义,业务工程项目装着工程接口,在业务工程接口下,测试可以创建业务的接口测试用例(是不是很绕嘴?

主要分享测试的学习资源,帮助快速了解测试行业,帮助想转行、进阶、小白成长为高级测试工程师。 3436

【主题建模】一种基于深度学习的主题建模方法:BERTopic(理论篇)

在我的博客中已经写了很多关于主题建模的内容,当你准备了解 BERTopic 时,默认你已经知道了 LSA、pLSA、NFM、LDA 等传统的主题建模方法。关于主题建模的前置知识我在这里不做赘述,感兴趣的同学可以看看我前几篇博客。学习 BERTopic 需要一定的机器学习基础,让我们一起开始吧!

Data · Model · Agent · Repeat 9896

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

如何快速实现Swagger API文档自动化:终极Maven与Gradle集成指南

🚀 **Swagger-core** 是一个强大的开源工具,专门用于为REST API自动生成Swagger API规范文档。通过简单的注解,开发者就能创建专业、交互式的API文档,彻底告别手动维护文档的繁琐工作。本文将为你展示如何通过Maven和Gradle插件实现API文档生成的完全自动化。 ## 🔍 为什么选择Swagger自动化文档生成? 传统的API文档维护面临着诸多挑战: -

gitblog_00158的博客 835

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

上一篇: 微服务: 写注册和登录的接口
下一篇: 微服务: Swagger生成Markdown文档
veryitman
博客等级 码龄16年 472粉丝 310原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值