掌握Swagger3自动化生成接口文档完成后端提效

news2025/7/23 6:57:55

文章目录

  • OpenApi规范
  • Swagger3快速上手
    • Swagger3使用
  • Swagger3.x常用注解讲解和配置
    • @Api 模块配置
    • @ApiOperation 接口配置
    • @ApiParam 方法参数配置
    • @ApiIgnore 忽略此接口
    • @ApiModel()和@ApiModelProperty()
    • @ApiResponse描述接口响应
  • 注意
  • 可能出现的问题

OpenApi规范

开放API规范(OAS)是⼀种无需编写实际API代码就可以记录API的方法。 这是⼀种开放源代码格式,可以用来描述API。 在此过程中,我们可以使用JSON或YAML格式。

OpenAPI文档有三个必需的部分或对象,也可以增加其他模块:

  1. openapi - OpenAPI规范版本的语义版本号
  2. info - 有关API的元数据
  3. paths - API的可用路径和操作

Swagger3快速上手

基于OpenAPI 规范(OpenAPI Specification,OAS)构建的开源接口文档自动生成工具,可以让开发人员快速设计、构建、记录以及使用Rest API

Swagger 主要包含了以下三个部分:

  • Swagger Editor:基于浏览器的编辑器, 使用它编写OpenAPI 规范。
  • Swagger UI:它会将编写的OpenAPI 规范呈现为交互式的 API ⽂档
  • Swagger Codegen:它可以通过为 OpenAPI(以前称为 Swagger)规范定义的任何 API生成服务器存根和客户端SDK来简化构建过程。

使用:
在java代码里面增加注解生成接口文档

优点:

  • ⽀持SpringMVC、SpringBoot、SpringCloud等主流java框架 对java代码友好
  • 界面简洁
    国内比较活跃,主要是spring社区带动功能比较多

缺点:

  • 对跨语⾔⽀持不友好(可以和knife4j整合解决这个 问题)
  • 代码需要引入相关依赖包和配置
  • 文档相对缺少

Swagger3使用

添加依赖

<dependency>
	<groupId>io.springfox</groupId>
	<artifactId>springfox-boot-starter</artifactId>
	<version>3.0.0</version>
</dependency>

增加配置

#spring.application.name=1024shop接口,增加中文会乱码,可以修改文件编码,或者使用yml格式
spring.application.name=1024shop

# ===== 自定义swagger配置 ===== #
swagger.enable=true
swagger.application-name= ${spring.application.name}
swagger.application-version=1.0
#swagger.application-description=1024shop电商平台管理后端接口文档
swagger.application-description=1024shop api info 

创建配置类

@Component
@Data
@ConfigurationProperties("swagger")
@EnableOpenApi
public class SwaggerConfiguration {
        /**
         * 是否开启swagger,生产环境一般关闭,所以这里定义一个变量
         */
        private Boolean enable;

        /**
         * 项目应用名
         */
        private String applicationName;

        /**
         * 项目版本信息
         */
        private String applicationVersion;

        /**
         * 项目描述信息
         */
        private String applicationDescription;

        @Bean
        public Docket docket(){

            return new Docket(DocumentationType.OAS_30)

                    .pathMapping("/")

                    // 定义是否开启swagger,false为关闭,可以通过变量控制,线上关闭
                    .enable(enable)

                    //配置api文档元信息
                    .apiInfo(apiInfo())

                    // 选择哪些接口作为swagger的doc发布
                    .select()


                    //apis() 控制哪些接口暴露给swagger,
                    // RequestHandlerSelectors.any() 所有都暴露
                    // RequestHandlerSelectors.basePackage("net.xdclass.*")  指定包位置
                    // withMethodAnnotation(ApiOperation.class)标记有这个注解 ApiOperation
                    .apis(RequestHandlerSelectors.withMethodAnnotation(ApiOperation.class))

                    .paths(PathSelectors.any())

                    .build();
        }

        private ApiInfo apiInfo() {
            return new ApiInfoBuilder()
                    .title(applicationName)
                    .description(applicationDescription)
                    .contact(new Contact("豆浆两块钱",
                            "https://blog.csdn.net/qq_46033586",
                            "730227081@qq.com"))
                    .version(applicationVersion)
                    .build();
        }
}

访问路径
http://localhost:8080/swagger-ui/index.html

Swagger3.x常用注解讲解和配置

@Api 模块配置

⽤在controller类,描述API接口

@Api(tags = "轮播图管理模块",value = "轮播图管理相关接口")
@RestController
@RequestMapping("api/v1/banner")
public class BannerController {
}

@ApiOperation 接口配置

⽤在方法上,描述接口方法

@ApiOperation("轮播列表")
@GetMapping("list")
public JsonData list(){
}

@ApiParam 方法参数配置

用在入参上面,描述参数

@ApiOperation("查看用户详情")
@GetMapping("detail")
public JsonData query(@ApiParam(name = "id",value = "用户id",example = "1")
                      @RequestParam("id") int id){
}

@ApiIgnore 忽略此接口

不生成文档

@ApiIgnore
@ApiOperation("根据id删除用户")
@DeleteMapping("/delete/{id}")
public JsonData delById(
	@ApiParam(name = "id",value = "用户id",example = "1")
	@PathVariable int id){
}

@ApiModel()和@ApiModelProperty()

@ApiModel()
用于类表示对类进行说明,用于参数用实体类接收,value–表示对象名,description–描述这种⼀般用在post创建的时候,使用对象提交这样的场景

@ApiModelProperty()
用于方法,字段:表示对model属性的说明或者数据操作更改
value–字段说明
name–重写属性名字
dataType–重写属性类型
required–是否必填
example–举例说明
hidden–隐藏

@ApiModel(value = "新增用户请求模型")
@Data
public class SaveUserRequest {

    @ApiModelProperty(value = "主键")
    private int id;

    @ApiModelProperty(value = "邮箱",required = true,example = "730227081@qq.com")
    private String email;

    @ApiModelProperty(value = "手机号",required = false)
    private String phone;

    @ApiModelProperty(value = "昵称")
    private  String name;
}


@ApiOperation("新增用户")
@PostMapping("save")
//public JsonData save(SaveUserRequest userRequest){
public JsonData save(@RequestBody SaveUserRequest userRequest){
	return JsonData.buildSuccess();
}

在这里插入图片描述
在这里插入图片描述

@ApiResponse描述接口响应

public class HttpCodeStatus {
    public static final String REDIRECT = "302";
}


@ApiOperation("用户登录")
@PostMapping("login")
@ApiResponses({
	@ApiResponse(responseCode = HttpCodeStatus.REDIRECT, description = "重定向,跳转登录"),
	@ApiResponse(responseCode = "403",description = "没权限"),
	})
public JsonData login(
	@ApiParam(name = "phone", value = "手机号",example = "13888888888")
	@RequestParam("phone") String phone,
	
	@ApiParam(name = "pwd", value = "密码",example = "123456")
	@RequestParam("pwd")String pwd){

	return JsonData.buildSuccess();
}

在这里插入图片描述
在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述

注意

明确接口的Http请求方式:⼀个接口使用@RequestMapping会生成多个文档

可能出现的问题

org.springframework.context.ApplicationContextException:
Failed to start bean ‘documentationPluginsBootstrapper’;nested exception is java.lang.NullPointerException

SpringBoot2.6之后,Spring MVC处理程序映射匹配请求路径的默认策略已从 AntPathMatcher 更改为PathPatternParser。如果需要切换为AntPathMatcher,官方给出的方法是配置spring.mvc.pathmatch.matching-strategy=ant_path_matcher

只需要将spring.mvc.pathmatch.matching-strategy=ant_path_matcher添加到配置文件中即可。

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

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

相关文章

Java内存屏障简介

简介 内存屏障是插入两个CPU命令之间的命令&#xff0c;禁止处理器命令的重新排序(如屏障)&#xff0c;以确保有序性。此外&#xff0c;为了达到屏障的效果&#xff0c;在处理器写入、读取值之前&#xff0c;将主机的值写入缓存&#xff0c;清空无效的队列&#xff0c;保障可见…

C++函数重载及其背后的原理

写在前面 先说说我的状态吧&#xff0c;五一假期五天假&#xff0c;这些天都在玩&#xff0c;很少学习&#xff0c;我不是后悔&#xff0c;也没必要&#xff0c;本来假期就是为了让自己放松.我唯一要反思看到别人在学,我心里也想学但是却做不到,这是我的缺点,后面我会克服的.尽…

运维提质增效,有哪些办法可以做

凡是代码&#xff0c;难免有 bug。 开发者们的日常&#xff0c;除了用一行行代码搭产品外&#xff0c;便是找出代码里的虫&#xff0c;俗称 debug。 随着移动互联网的快速发展&#xff0c;App 已经成为日常生活中不可或缺的一部分。但是在开发者/运维人员的眼里简直就是痛苦的…

使用R语言包clusterProfiler做KEGG富集分析时出现的错误及解决方法

使用enrichKEGG做通路富集分析时&#xff0c;一直报错&#xff1a;显示No gene can be mapped....k <- enrichKEGG(gene gene, organism "hsa", pvalueCutoff 1, qvalueCutoff 1)但是之前用同样的基因做分析是能够成功地富集到通路&#xff0c;即便是网上的数据…

Appium+Python连接真机、跳过登录页、Unexpected error while obtaining UI hierarchy问题

Appium连接真机 使用数据线连接电脑&#xff0c;然后选择文件传输方式 打开手机设置拉至底部&#xff0c;点击关于手机&#xff0c;连续点击7次版本号打开开发者模式 点击设置中的系统与更新&#xff0c;找到开发者选项----> 打开USB调试即可 在终端中输入adb devices确定…

c语言经典例题-数组的使用

(创作不易&#xff0c;感谢有你&#xff0c;你的支持&#xff0c;就是我前行的最大动力&#xff0c;如果看完对你有帮助&#xff0c;请留下您的足迹&#xff09; 选择法排序&#xff1a; 题目&#xff1a; 本关任务&#xff1a;使用选择法排序&#xff08;http://t.csdn.cn/…

统计学 一元线性回归

统计学 一元线性回归 回归&#xff08;Regression&#xff09;&#xff1a;假定因变量与自变量之间有某种关系&#xff0c;并把这种关系用适当的数学模型表达出来&#xff0c;利用该模型根据给定的自变量来预测因变量 线性回归&#xff1a;因变量和自变量之间是线性关系 非线…

看板组件:Bryntum Task Board JS 5.3.0 Crack

一个超级灵活的看板组件&#xff0c;Bryntum Task Board 是一个灵活的看板 Web 组件&#xff0c;可帮助您可视化和管理您的工作。 功能丰富 任务板非常灵活&#xff0c;允许您完全自定义卡片、列和泳道的渲染和样式。借助丰富的 API&#xff0c;您甚至可以在运行时打开或关闭功…

MSE 诊断利器上线

作者&#xff1a;子葵 背景 在日常开发和生产环境中&#xff0c;可能会遇到由于网络或者其他因素导致客户端连接 MSE 集群出现异常&#xff0c;此时需要排查集群以及客户端状态&#xff0c;通常需要通过文档查询对应的异常解释来定位问题&#xff0c;排查问题的链路比较长&am…

JNI内通过参数形式从C/C++中传递string类型数据至Java层

目录 0 前言 1 string类型参数形式传值 2 测试和结果 0 前言 类似之前我写过的两篇文章&#xff1a;一篇介绍了在JNI中基础类型int的传值方式&#xff1b;一篇详细梳理了在JNI层中多维数组的多种传值方式。 JNI内两种方式从C/C中传递一维、二维、三维数组数据至Java层详细…

如何实现接口幂等性

1 什么是幂等 幂等操作的特点是一次或者任意多次执行所产生的影响均与一次执行的影响相同&#xff0c;不会因为多次的请求而产生不一样的结果。换句话说&#xff0c;就是我使用相同的请求参数&#xff0c;去请求同一个接口&#xff0c;不管请求多少次获取到的响应数据应该是一…

JUC并发编程——Park Unpark

一、Park & Unpark 1.1 基本使用 它们是 LockSupport 类中的方法 // 暂停当前线程 LockSupport.park(); // 恢复某个线程的运行 LockSupport.unpark(暂停线程对象)先 park 再 unpark import lombok.extern.slf4j.Slf4j; import java.util.concurrent.locks.LockSuppor…

Baumer工业相机堡盟相机如何使用PnPEventHandler实现相机掉线自动重连(C++新)

项目场景&#xff1a; Baumer工业相机堡盟相机传统开发包BGAPI SDK进行工业视觉软件整合时&#xff0c;常常需要将SDK中一些功能整合到图像处理软件中&#xff0c;方便项目的推进使用&#xff1b; 在项目的图像处理任务中&#xff0c;可能会因为一些硬件比如线缆网卡的原因导…

五点CRM系统核心功能是什么

很多企业已经把CRM客户管理系统纳入信息化建设首选&#xff0c;用于提升核心竞争力&#xff0c;改善企业市场、销售、服务、渠道和客户管理等几个方面&#xff0c;并进行创新或转型。CRM系统战略的五个关键要点是&#xff1a;挖掘潜在客户、评估和培育、跟进并成交、分析并提高…

传输层--UDP协议

目录 一.补充知识 1.1传输层​ 1.2端口号 1.3netstat 二.UDP 2.1UDP协议格式 2.2UDP如何将有效载荷上交给上层 2.3UDP如何将报头与有效载荷进行分离&#xff1f; 2.4理解报头 2.5.UDP协议特点 2.6UDP缓冲区 2.6基于UDP的应用层协议 一.补充知识 1.1传输层 之前介绍…

相恨见晚的office办公神器(不坑盒子/打工人Excel插件2023年最新版)

不坑盒子 这是一个非常好用的插件工具&#xff0c;专门应用在Word文档和wps&#xff0c;支持Office 2010以上的版本&#xff0c;操作也简单且实用。 不坑盒子下载及使用说明 一键排版功能 像是下面的自动排版功能&#xff0c;可以在配置里面先设定好需要的格式&#xff0c;…

站内SEO排名不上?或许是这些常见问题导致的

在当今数字化的时代&#xff0c;几乎所有的企业和个人都有自己的网站。 然而&#xff0c;拥有一个网站并不代表着它就一定能够被搜索引擎优先展示。 SEO&#xff08;搜索引擎优化&#xff09;是一门需要技巧和耐心的艺术。在实践SEO的过程中&#xff0c;站内SEO是一个重要的环…

Hive 运行环境搭建

文章目录Hive 运行环境搭建一、Hive 安装部署1、安装hive2、MySQL 安装3、Hive 元数据配置到 Mysql1) 拷贝驱动2) 配置Metastore 到 MySQL3) 再次启动Hive4) 使用元数据服务的方式访问Hive二、使用Dbaver连接HiveHive 运行环境搭建 HIve 下载地址&#xff1a;http://archive.a…

剑指-Offer-09-用两个栈实现队列

剑指-Offer-09-用两个栈实现队列 题目描述&#xff1a; 用两个栈实现一个队列。队列的声明如下&#xff0c;请实现它的两个函数 appendTail 和 deleteHead &#xff0c;分别完成在队列尾部插入整数和在队列头部删除整数的功能。(若队列中没有元素&#xff0c;deleteHead 操作…

Qt 事件循环

一、QT消息/事件循环机制   Qt作为一个可视化GUI界面操作系统&#xff0c;是基于事件驱动的&#xff0c;我们程序执行的顺序不再是线性的&#xff0c;而是由一个个应用程序内部或外部的事件进行驱动的&#xff0c;无事件时便阻塞。这个有点类似于while循环&#xff0c;函数体…