Swagger教程

news2025/3/1 22:21:07

Swagger

目标

Swagger简介【了解】

Springboot整合swagger【掌握】

Swagger 常用注解【掌握】

一、Swagger简介

​ Swagger 是一系列 RESTful API 的工具,通过 Swagger 可以获得项目的⼀种交互式文档,客户端 SDK 的自 动生成等功能。

​ Swagger 的目标是为 REST APIs 定义一个标准的、与语⾔言无关的接口,使人和计算机在看不到源码或者看不到文档或者不能通过网络流量检测的情况下,能发现和理解各种服务的功能。当服务通过 Swagger 定义,消费者就能与远程的服务互动通过少量的实现逻辑。Swagger(丝袜哥)是世界上最流行的 API 表达工具。

二、Springboot整合swagger

​ 使用 Spring Boot 集成 Swagger 的理念是,使用用注解来标记出需要在 API 文档中展示的信息,Swagger 会根据项目中标记的注解来生成对应的 API 文档。Swagger 被号称世界上最流行的 API 工具,它提供了 API 管理的全套解决方案,API 文档管理需要考虑的因素基本都包含,这里将讲解最常用的定制内容。

1、添加swagger坐标

Spring Boot 集成 Swagger 3 很简单,需要引入依赖并做基础配置即可。

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

2、Swagger Helloword 实现

2.1、创建springboot项目

在启动类上加上@EnableOpenApi 注解 启用swagger api文档功能

@SpringBootApplication
@EnableOpenApi  //启动swagger api文档注解
public class SwaggerApplication {
}

2.2、写一个接口

@RestController
public class SwaggerController {

    @RequestMapping("/hello")
    public String getInfo(String par){
        return par;
    }
}

2.2、访问地址

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

在这里插入图片描述

三、常用的配置注解

​ Swagger 通过注解表明该接口会生成文档,包括接口名、请求方法、参数、返回信息等

1、Api 注解和 ApiOperation 注解

  • @Api

    使用在类上,表明是swagger资源,@API拥有两个属性:value、tags。

    生成的api文档会根据tags分类,直白的说就是这个controller中的所有接口生成的接口文档都会在tags这个list下;tags如果有多个值,会生成多个list,每个list都显示所有接口

    value的作用类似tags,但是不能有多个值

    语法:
      @Api(tags = "用户操作")
      或
      @Api(tags = {"用户操作","用户操作2"})
    
  • @ApiOperation

    使用于在方法上,表示一个http请求的操作

    语法:
        @ApiOperation(value = "", 
                      notes = "", 
                      response = )
    属性说明:
      value:方法说明标题
      notes:方法详细描述
      response:方法返回值类型
    

    案例:使用@Api和@ApiOperation生成api文档

    @RestController
    @Api(tags = {"hello请求","用户操作"})
    public class SwaggerController {
    
        @RequestMapping("/hello")
        @ApiOperation(value = "swagge请求",
                      notes = "第一个swagger请求",
                        response = String.class
    
        )
        public String getInfo(String param){
            return param;
        }
    }
    

2、ApiImplicitParams 注解和 ApiImplicitParam

@ApiImplicitParams 注解和 @ApiImplicitParam 用于对方法中的非对象参数(参数绑定到简单类型时使用。)进行说明

语法:
@ApiImplicitParams(value = {
     @ApiImplicitParam(name="", value = "", type = "", required = true, paramType = "", defaultValue  = "")
})

属性说明:
    name:形参名称
    value:形参的说明文字
    type:形参类型
    required:该参数是否必须  true|false
    paramType: 用于描述参数是以何种方式传递到 Controller 的,它的值常见有: path, query, body 和 header 
        path 表示参数是『嵌在』路径中的,它和 @PathVariable 参数注解遥相呼应;
    	query 表示参数是以 query string 的形式传递到后台的(无论是 get 请求携带在 url 中,还是 post 请求携带在请求体中),它和 @RequestParam 参数注解遥相呼应;
    	header 表示参数是『藏在』请求头中传递到后台的,它和 @RequestHeader 参数注解遥相呼应的。
    	form 不常用.
    defaultValue :参数默认值

注意:@ApiImplicitParam 的 name 属性要和 @RequestParam 或 @PathVariable 的 value 遥相呼应。

案例:使用@ApiImplicitParams注解和 @ApiImplicitParam 对方法参数进行说明

@RestController
@Api(tags = {"hello请求","用户操作"})
public class SwaggerController {

    @RequestMapping("/hello")
    @ApiOperation(value = "swagge请求",
                  notes = "第一个swagger请求",
                    response = String.class
    )
    @ApiImplicitParams(value ={
            @ApiImplicitParam(name="param",
                    value = "参数名",
                    type = "String",
                    required = true,
                    paramType = "query",
                    defaultValue  = "1" )
    })
    public String getInfo(String param){
        return param;
    }
}

3、ApiModel注解和 ApiModelProperty

  • @ApiModel

    用在实体类上,表示对类进行说明,用于实体类中的参数接收说明。

    语法:
        @ApiModel("用户类")
        public class Users {
        }
    
  • @ApiModelProperty

    用于对实体类中的属性进行说明

    @ApiModel("用户类")
    @Data
    public class Users {
    
        @ApiModelProperty(value = "编码:主键")
        private Integer id;
    
        @ApiModelProperty(value = "用户名")
        private String username;
    
        @ApiModelProperty(value = "密码")
        private String password;
    
    }
    

4、ApiResponse 和 ApiResponses

@ApiResponses 注解和 @ApiResponse 标注在 Controller 的方法上,用来描述 HTTP 请求的响应

/**
     * 添加用户
     *
     * @param user
     * @return
     */
    @PostMapping("/add")
    @ApiOperation(value = "添加用户",notes = "添加用户信息",response = ResponseResult.class)
    @ApiResponses({ @ApiResponse(code = 200, message = "添加成功", response = ResponseResult.class),
            	    @ApiResponse(code = 500, message = "添加失败", response = ResponseResult.class) })
    public ResponseResult<Void> addUser(@RequestBody User user) {
        //获得生成的加密盐
        user.setSalt(SaltUtils.getSalt());
        int n = userService.addUser(user);
        if (n > 0) {
            return new ResponseResult<Void>(200, "添加成功");
        }
        return new ResponseResult<Void>(500, "添加失败");
    }

5、创建 SwaggerConfig 配置类

在 SwaggerConfig 中添加两个方法:(其中一个方法是为另一个方法作辅助的准备工作)

api()方法使用 @Bean,在启动时初始化,返回实例 Docket(Swagger API 摘要对象),这里需要注意的是 .apis(RequestHandlerSelectors.basePackage("xxx.yyy.zzz")) 指定需要扫描的包路路径,只有此路径下的 Controller 类才会自动生成 Swagger API 文档。

/**
 * Swagger配置类
 */
@Configuration  //项目启动时加载此类
public class SwaggerConfig {
    
    @Bean
    public Docket api(){
        return new Docket(DocumentationType.OAS_30)
                .apiInfo(apiInfo())
                .select()
                // 此处自行修改为自己的 Controller 包路径。
                .apis(RequestHandlerSelectors.basePackage("cn.woniu.controller"))
                .paths(PathSelectors.any())
                .build();
    }

    public ApiInfo apiInfo(){
		return new ApiInfoBuilder()
       .title("XXX 项目接口文挡")
       .description("XXX Project Swagger2 UserService Interface")  //说明信息
       .termsOfServiceUrl("http://localhost:8080/swagger-ui/index.html") //文档生成的主页地址
       .version("1.0")  //文档版本
       .build();
    }
}

apiInfo()方法配置相对重要一些,主要配置页面展示的基本信息包括,标题、描述、版本、服务条款等,查看 ApiInfo 类的源码还会发现支持 license 等更多的配置

四、springsecurity整合swagger

4.1,配置放行的地址

  http.authorizeRequests().antMatchers( "/swagger-ui.html",
                "/swagger-ui/*",
                "/swagger-resources/**",
                "/v2/api-docs",
                "/v3/api-docs",
                "/webjars/**").permitAll()
                .anyRequest().authenticated();

4.2,替换UI

上面的整个过程已经完成了,但是生成的接口文档的页面,其实很多人不太喜欢,觉得不太符合国人的使用习惯,所有又有一些大神,提供了其他的UI测试页面。这个页面的使用还是比较广泛的。

访问地址:http://localhost:8080/doc.html

	<dependency>
        <groupId>com.github.xiaoymin</groupId>
        <artifactId>swagger-bootstrap-ui</artifactId>
        <version>1.9.6</version>
    </dependency>

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

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

相关文章

TryHackMe-Year of the Owl(Windows渗透测试)

Year of the Owl 当迷宫在你面前&#xff0c;你迷失了方向时&#xff0c;有时跳墙思考是前进的方向。 端口扫描 循例 nmap SMB枚举 smbmap enum4linux也什么都没有 Web枚举 80端口 gobuster扫到一堆403&#xff0c;并没有什么有用的信息 443端口与80端口一致 47001端口依…

【SQL】公网远程访问局域网SQL Server数据库【无公网IP内网穿透】

目录 1.前言 2.本地安装和设置SQL Server 2.1 SQL Server下载 2.2 SQL Server本地连接测试 2.3 Cpolar内网穿透的下载和安装 2.3 Cpolar内网穿透的注册 3.1 Cpolar云端设置 3.2 Cpolar本地设置 4.公网访问测试 5.结语 转发自CSDN远程穿透的文章&#xff1a;[无需公网IP&am…

详解以太坊

以太坊原理 以太坊通过建立终极的抽象的基础层-内置有图灵完备编程语言的区块链-使得任何人都能够创建合约和去中心化应用&#xff0c;并在其中设立他们自由定义的所有权规则、交易方式和状态转换函数。 图灵完备&#xff1a;能够运行非常复杂的运算&#xff0c;最简单的理解…

基于共享储能电站的工业用户日前优化经济调度

目录 1 主要内容 共享电站示意图 目标函数 2 部分程序 3 程序结果 4 程序链接 1 主要内容 该程序方法复现《基于共享储能电站的工业用户日前优化经济调度》算例2和算例3&#xff0c;根据共享储能电站的商业运营模式&#xff0c;将共享储能电站应用到工业用户经济优化调度…

〖Python网络爬虫实战⑨〗- 正则表达式基本原理

订阅&#xff1a;新手可以订阅我的其他专栏。免费阶段订阅量1000 python项目实战 Python编程基础教程系列&#xff08;零基础小白搬砖逆袭) 说明&#xff1a;本专栏持续更新中&#xff0c;目前专栏免费订阅&#xff0c;在转为付费专栏前订阅本专栏的&#xff0c;可以免费订阅付…

【Linux】用户命令(创建,修改,切换,删除,密码)

目录 1.创建 查看用户信息 查看id 2.修改 修改用户名 修改用户uid 操作前&#xff1a; 操作后 修改组名 操作前&#xff1a; 操作后: 修改组id 操作前&#xff1a; 操作后&#xff1a; 操作前&#xff1a; 操作后: 3.切换用户 4.删除 操作前&#xff1a; 操作…

如何在Spring Boot中使用Spring MVC

目录 1.MVC 2.Spring MVC 3.Spring Boot中使用Spring MVC 3.1.配置 3.1.1.文件配置 3.1.2.代码配置 3.2.使用 3.2.1.映射处理器 3.2.2.传参 3.2.3.参数转换 3.2.4.数据校验 3.2.5.数据模型 3.2.6.视图和解析器 3.2.7.拦截器 1.MVC MVC 是一种常见的软件设计模式…

企业级信息系统开发讲课笔记2.4 利用MyBatis实现条件查询

文章目录零、本节学习目标一、查询需求二、打开MyBatisDemo项目三、对学生表实现条件查询&#xff08;一&#xff09;创建学生映射器配置文件&#xff08;二&#xff09;在MyBatis配置文件里注册学生映射器配置文件&#xff08;三&#xff09;创建学生映射器接口&#xff08;四…

macOS Ventura 13.3.1 (22E261) Boot ISO 原版可引导镜像

本站下载的 macOS 软件包&#xff0c;既可以拖拽到 Applications&#xff08;应用程序&#xff09;下直接安装&#xff0c;也可以制作启动 U 盘安装&#xff0c;或者在虚拟机中启动安装。另外也支持在 Windows 和 Linux 中创建可引导介质。 macOS Ventura 13.3.1 为 Mac 提供下…

os库的使用与第三方库安装脚本

os库基本介绍 os 顾名思义&#xff0c;就是与操作系统相关的标准库。如&#xff1a;文件&#xff0c;目录&#xff0c;执行系统命令等。 os库是Python标准库&#xff0c;包含几百个函数 常用路径操作、进程管理、环境参数等几类 路径操作&#xff1a;os.path子库&#xff0…

安捷伦34970A

18320918653 34970A Agilent 34970A 数据采集器|安捷伦数据采集器|34970A 您可信任的测量&#xff1a; 我们把销售良好数字多用表测量引擎嵌入在3槽主机箱中。您能获得优异的测量能力&#xff0c;带有内置信号调整的通用输入&#xff0c;模块化的灵活性&#xff0c;低廉的售…

Ubuntu20.04配置CuckooSandbox环境

Ubuntu20.04配置CuckooSandbox环境 因为最近要做恶意软件分析&#xff0c;阅读论文发现动态分析的效果普遍比静态分析的效果要好一些&#xff0c;所以需要搭建一个动态分析的环境&#xff0c;查阅资料发现Cuckoo Sandbox是不错的自动化分析环境&#xff0c;但是搭建起来还是比…

机器学习相关建议

1、开发机器学习系统或者优化的路径 训练数据量的增加对机器学习系统的影响增加特征集或减少特征集改变正则化参数尝试增加多项式特征 | 高偏差、欠拟合 | 高方差、过拟合 | | ------------------ | ------------------------------ | | 尝试增加多项式特征 | 尝试减少特征的数…

30-60K,转型云原生架构师和SRE需要哪些能力?

你好&#xff0c;我是王炜&#xff0c;欢迎和我一起学习云原生的核心技术。 先来简单介绍一下我自己吧。作为前腾讯云 CODING 架构师&#xff0c;现在深圳氦三科技的联合创始人&#xff0c;同时也是中国云原生社区深圳站的负责人&#xff0c;我见证了云原生在国内从萌芽到蓬勃…

【k8s完整实战教程6】完整实践-部署一个federated_download项目

系列文章&#xff1a;这个系列已完结&#xff0c;如对您有帮助&#xff0c;求点赞收藏评论。 读者寄语&#xff1a;再小的帆&#xff0c;也能远航&#xff01; 【k8s完整实战教程0】前言【k8s完整实战教程1】源码管理-Coding【k8s完整实战教程2】腾讯云搭建k8s托管集群【k8s完…

【算法的复杂度】

算法的时间复杂度和空间复杂度一、算法效率二、时间复杂度1. 时间复杂度的概念2. 大O的渐进表示法3. 常见时间复杂度计算举例三、空间复杂度一、算法效率 算法在编写成可执行程序后&#xff0c;运行时需要耗费时间资源和空间(内存)资源 。因此衡量一个算法的好坏&#xff0c;一…

采用多种方式实现项目的查询多级缓存(六)

4.7.Nginx本地缓存 现在&#xff0c;整个多级缓存中只差最后一环&#xff0c;也就是nginx的本地缓存了。如图&#xff1a; 4.7.1.本地缓存API OpenResty为Nginx提供了shard dict的功能&#xff0c;可以在nginx的多个worker之间共享数据&#xff0c;实现缓存功能。 1&#xf…

【创建者模式】原型模式

文章目录优秀借鉴1、简介2、结构3、浅拷贝和深拷贝4、浅拷贝实现4.1、实现步骤4.2、结果分析5、深拷贝思路5.1、clone方法5.2、序列化与反序列化6、应用场景优秀借鉴 什么是原型模式&#xff08;Prototype&#xff09;&#xff1f;应用场景是什么&#xff1f; 【设计模式】原…

PointNN:一种无参数化的高效点云特征提取方法

前言 本文需要一些三维点云相关基础&#xff0c;非常适合深蓝学院修过相关课程的同学阅读。 点云处理从最早期的手工设计特征&#xff0c;到之后渐渐有一些深度学习的尝试&#xff0c;经历了 multi-view或者3D卷积等等的混沌时期&#xff0c;知道 pointnet 的横空出世&#x…

微服务治理框架(Istio)的认证服务与访问控制

本博客地址&#xff1a;https://security.blog.csdn.net/article/details/130152887 一、认证服务 1.1、基于JWT的认证 在微服务架构下&#xff0c;每个服务是无状态的&#xff0c;由于服务端需要存储客户端的登录状态&#xff0c;因此传统的session认证方式在微服务中不再适…