Spring Boot集成Swagger2

news2024/11/18 16:24:00

文章目录

  • 1.什么是Swagger2
  • 2.SpringBoot集成Swagger2
  • 3.Swagger2配置管理
    • (1)对Swagger2信息进行更改
    • (2)swagger配置扫描接口
    • (3)配置api文档分组(分组无非就是多个Docket)
    • (4)实体类的配置
  • 面试题:如果我们希望Swagger在某一个环境中使用,在其他时候不使用怎么办
    • 第一种方法:Environment
    • 第二种方法:通过@Value注解获取,进行if判断即可:


1.什么是Swagger2

Swagger 是一种接口描述语言,主要用于生成、描述、调用以及可视化 RESTful 风格的 Web 服务接口文档。
以前的项目可能更多的是前后端未分开同时进行开发,所以接口文档可能不是那么重要。
但现在主流的项目基本都是前后端分离,如果前后端没有沟通好,就有可能导致接口文档更新不及时,造成一些不必要的麻烦。
而通俗地讲,Swagger 就是帮我们写接口文档的。它不仅能自动生成实时接口文档,还能生成测试用例,方便我们进行测试。

官网:https://swagger.io/
Maven 仓库:

在这里插入图片描述

2.SpringBoot集成Swagger2

导入Maven依赖

   <!-- swagger2核心 -->
        <dependency>
            <groupId>io.springfox</groupId>
            <artifactId>springfox-swagger2</artifactId>
            <version>3.0.0</version>
        </dependency>
        <!-- swagger2的UI界面 -->
        <dependency>
            <groupId>io.springfox</groupId>
            <artifactId>springfox-swagger-ui</artifactId>
            <version>3.0.0</version>
        </dependency>

创建config包,编写配置类

package com.blog.demo.config;
import org.springframework.context.annotation.Configuration;
import springfox.documentation.swagger2.annotations.EnableSwagger2;
@Configuration  //定义配置类 @Component交由spring管理Bean
@EnableSwagger2 //开启Swagger2
public class Swagger2config {
}

启动springboot项目,报错
在这里插入图片描述原因: 这是因为Springfox使用的路径匹配是基于AntPathMatcher的,而Spring Boot 2.6.X使用的是PathPatternMatcher。
查了一下百度说添加以下配置

spring:
  mvc:
    pathmatch:
      matching-strategy: ant_path_matcher

在这里插入图片描述结果报404,;
所以选择回退版本选择使用人数较多的2.9.2版本,还是报错,加入上面的配置后,这次运行成功,并且也可以访问到页面:
http://localhost:8080/swagger-ui.html
在这里插入图片描述因为使用的是 @RequestMapping注解,没有指定访问的请求类型,所以接口都显示了
在这里插入图片描述

3.Swagger2配置管理

配置Swagger2是通过实体类Docket进行操作的

在这里插入图片描述在这里插入图片描述swagger信息类
在这里插入图片描述

(1)对Swagger2信息进行更改

@Configuration  //定义配置类 @Component交由spring管理Bean
@EnableSwagger2 //开启Swagger2
public class Swagger2config {
    @Bean
    public Docket docket(){
        return new Docket(DocumentationType.SWAGGER_2)
                .apiInfo(apiInfo());
    }
    private ApiInfo apiInfo() {
        Contact DEFAULT_CONTACT = new Contact("刘恒", "https://www.baidu.com/", "2296273390@qq.com");
       return new ApiInfo("恒哥的接口文档",
                "博客系统的api文档",
                "1.0",
                "urn:tos",
                DEFAULT_CONTACT,
                "Apache 2.0",
                "http://www.apache.org/licenses/LICENSE-2.0",
                new ArrayList());
    }
}

在这里插入图片描述

(2)swagger配置扫描接口

slelect底层new ApiSelectorBuilder()
在这里插入图片描述apios可以发现只有一个
在这里插入图片描述

public Docket docket(){
        return new Docket(DocumentationType.SWAGGER_2)
                .apiInfo(apiInfo())
                .select()
        //RequestHandlerSelectors,配置要扫描接口的方式
        //basePackage指定扫描的包
        //any扫描全部的包
        //none()都不扫描
        //withClassAnnotation()扫描类上的注解,参数是注解的反射对象
        //withMethodAnnotation()扫描方法上的注解
                .apis(RequestHandlerSelectors.basePackage("com.blog.demo.controller"))
                .build();
 .apis(RequestHandlerSelectors.basePackage("com.blog.demo.controller"))
                //paths是过滤路径,不让com.blog.demo的过去
                //   any()任何请求都扫描
                //none()  任何请求都不扫描
                //regex(final String pathRegex) 通过正则表达式控制,返回true扫描,false不扫描
                // ant(final String antPattern)通过ant()表达式控制,返回true扫描,false不扫描
                .paths(PathSelectors.ant("com.blog.demo"))
                .build();

在这里插入图片描述

(3)配置api文档分组(分组无非就是多个Docket)

  @Bean
    public Docket docket1(){
        return  new Docket(DocumentationType.SWAGGER_2).groupName("开发者1");
    }
    @Bean
    public Docket docket2(){
        return  new Docket(DocumentationType.SWAGGER_2).groupName("开发者2");
    }
    @Bean
    public Docket docket3(){
        return  new Docket(DocumentationType.SWAGGER_2).groupName("开发者3");
    }

在这里插入图片描述

(4)实体类的配置

只要返回值中存在实体类,他就会被扫描到Swagger中
在这里插入图片描述
对实体类增加注释说明:

  • @ApiModel(“ ”)为实体类添加说明信息
  • @ApiModelProperty(“ ”)为实体类中的属性添加说明信息
  • @Api(tags = “ ”)为接口添加说明信息
  • @ApiOperation(“ ”)为请求增加说明信息
  • @ApiParam(“ ”)为请求中的参数增加说明信息
@ApiModel("管理员类")
public class User {
    private Integer id;
    @ApiModelProperty("管理员用户名")
    private  String username;
@Controller
@Api(tags = "管理员登录接口")
public class loginController {
    private Logger logger = LoggerFactory.getLogger(loginController.class);

    @Autowired
    private AdminServiceImpl adminService;
    @ApiOperation("得到管理员信息请求")
    @GetMapping("/app")
    @ResponseBody
    public User getUser(){
        User user = adminService.queryAdmin();
        return  user;
    }
    @GetMapping("/hello")
    public String hello(@ApiParam("请求参数中的name") String username){
        return "hello"+username;
    }
}

在这里插入图片描述

面试题:如果我们希望Swagger在某一个环境中使用,在其他时候不使用怎么办

第一种方法:Environment

public class Swagger2config {
    @Resource
    private  Environment environment;
    @Bean
    public Docket docket(){
        Profiles profiles = Profiles.of("dev");
       //获取生产环境
       //通过environment.acceptsProfiles(profiles)判断自己是否处在指定环境
        boolean isEnable = environment.acceptsProfiles(profiles);
        return new Docket(DocumentationType.SWAGGER_2)
                .apiInfo(apiInfo())
                .enable(isEnable)
                .select()
               .apis(RequestHandlerSelectors.basePackage("com.blog.demo.controller"))
                .build();
    }
spring:
  profiles:
    active: pro

在这里插入图片描述

第二种方法:通过@Value注解获取,进行if判断即可:

   private org.slf4j.Logger logger = LoggerFactory.getLogger(Swagger2config.class);
    @Value("${spring.profiles.active}")
    private  String active;
    @Bean
    public Docket docket(){
         //打印在控制台上:
        logger.info("生产环境是"+active);

在这里插入图片描述

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

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

相关文章

自学黑客(网络安全),看完这篇,再去追你的黑客梦!

今天专题是替一些想入门网络安全&#xff0c;但还迷茫不知所措的同学解一解惑。想30天零基础入门网络安全&#xff0c;这些你一定要搞清楚。 一、学习网络安全容易造成的误区 1、把编程当作目的&#xff0c;忽略了它的工具职能 千万不要抱着“以编程为目的&#xff0c;再开始…

C++(2):变量和基本类型

基本内置类型 C定义了一套包括算术类型&#xff08;arithmetic type&#xff09;和空类型&#xff08;void&#xff09;在内的基本数据类型。其中算术类型包含了字符、整型数、布尔值和浮点数。空类型不对应具体的值。 算数类型 算数类型分为两类&#xff1a;整型&#xff0…

Cesium教程(二):Cesium默认控件详解

Cesium初始界面在默认情况下&#xff0c;附带了一些有用的小控件&#xff0c;如下图所示&#xff0c;可以执行一些基本的功能。 1、①Geocoder Geocoder是一种定位搜索工具&#xff0c;它可以定位到查询位置。默认使用微软的Bing地图&#xff0c;若更换其他底图可能出现查找不到…

pnpm命令介绍

一、安装pnpm npm install -g pnpm 二、设置镜像源 pnpm config set registry https://registry.npm.taobao.org/ # 检查 pnpm config get registry 三、常用命令 # 查看ts-node的所有版本 pnpm view ts-node versions # 等价与npm i nodemon -g pnpm add nodemon -g # npm i p…

《深入理解Java虚拟机》 JAVA 字节码指令 基础

1.操作数栈 解释时&#xff0c;JVM会为方法分配一个栈帧&#xff0c;而栈帧又由 局部变量表&#xff0c;操作数帧&#xff0c;方法引用&#xff0c;动态链接 组成 方法中的每条指令执行时&#xff0c;要求该指令的操作数已经压入栈中&#xff1b;执行指令时会将操作数从栈中弹…

美团面试,被拷打了一小时....

刚从美团走出来&#xff0c;被拷打了一小时…越想越觉得可惜&#xff0c;回想面试经过&#xff0c;好好总结了几个点&#xff0c;发现面试没过的主要原因是在几个关键的问题没有给到面试官想要的答案。从而失去了这次宝贵的机会。 根据你的工作经历&#xff0c;说说你对质量保证…

python基础语法(print、数据类型、变量、注释、输入、条件语句)

一、初识编码&#xff08;密码本&#xff09; 计算机中所有的数据本质上都是用0和1的组合来存储的。编码就相当于密码本&#xff0c;在计算机中有多个密码本&#xff1a;utf-8编码、gbk编码等 注意事项&#xff1a;在计算机中若以某个编码形式进行保存文件&#xff0c;以后也…

ERP系统数据丢失的潜在经济损失

随着ERP系统的普及和涉及的范围越来越广&#xff0c;基本覆盖所有行业&#xff0c;ERP系统的数据安全也越来越被重视&#xff0c;关系到企业生命的机密信息都被存储在ERP系统中。 因此&#xff0c;ERP系统里存储的数据一旦泄露和丢失是一件非常可怕的事件。 那么&#xff0c;…

通俗易懂的教你如何使用Java实现快速排序

文章目录 快速排序&#x1f512;题目&#x1f4a1;分析&#x1f511;题解 快速排序 &#x1f512;题目 题目链接&#xff1a;785.快速排序-Acwing题库 &#x1f4a1;分析 基本思想&#xff1a;分治主要步骤 Step1&#xff1a;确定主元。从要划分的数组中选取一个元素作为主元…

python3+pytest+requests+allure+yaml测试框架搭建

目录 设计框架的原则 1.框架整体结构 2.框架各个模块说明 3.示例 3.1 先写一个测试用例 3.2 对上面的用例进行分层封装&#xff08;可根据业务复杂度分两层或者三层&#xff0c;此处演示分三层&#xff09; 3.3生成allure测试报告并查看 设计框架的原则 封装基类方法 对…

第十八章 使用LNMP架构部署动态网站环境

文章目录 第十八章 使用LNMP架构部署动态网站环境一、源码包程序1、源码包的优势2、基本步骤&#xff08;1&#xff09;、下载及解压源码包文件&#xff08;2&#xff09;、编译源码包代码&#xff08;3&#xff09;、生成二进制安装程序&#xff08;4&#xff09;、运行二进制…

VS2022调试Win-flex bison生成的C语言程序

Win-flex bison是flex和bison在Windows平台的一个移植版本&#xff0c;它支持flex&#xff08;快速词法分析器&#xff09;和bison&#xff08;GNU解析器生成器&#xff09;。 Win-flex bison的下载及安装可参看“Windows中使用Lex&#xff08;Win flex-bison&#xff09;”&a…

CIBF2023深圳电池展圆满结束!昂视期待与您下次相会

5月18日&#xff0c;CIBF2023深圳电池展圆满结束&#xff0c;展会为期三天&#xff0c;各位参展商展示了最新技术与产品&#xff0c;并在展位上开展花式互动&#xff0c;现场气氛火热。 作为电池行业的权威展会&#xff0c;CIBF2023深圳电池展为国内外用户、采购商、经销商提供…

cuda编程学习——第二个cuda程序(官方案例分析)!干货向(二)

前言&#xff1a; 最近在做三维重建&#xff0c;尤其是Nerf方面多视角合成工作的时候&#xff0c;意识到了cuda的编程计算可以大大提高其中渲染的计算&#xff0c;最明显的例子是Instant-ngp&#xff0c;Plenoxels等文章&#xff0c;因此后面会学Cuda一段时间&#xff0c;同时…

Python代码最好的加密.pyd——easycython(Windows系统)

1 安装easycython 1.1 建议选用python 3.6及其以下的版本&#xff01;&#xff01; 1.2 CMD命令行 pip install easycython2 安装Visual Studio 2.1 下载 点击链接 https://visualstudio.microsoft.com/zh-hans/free-developer-offers/ 2.2 安装注意事项 记得勾选红色下图的…

渗透测试--3.1.社会工程学攻击

目录 社会工程学攻击 SET介绍 一、建立克隆钓鱼网站收集目标凭证 二、set工具集之木马欺骗实战反弹链接 三、后渗透阶段 1.查看主机系统信息 2.到处用户密码的hash值 3.获得shell控制台 日志清除 四、钓鱼邮件 1、测试邮箱的连通性 2、参数说明 3、Kali 内置了s…

位运算实现加减乘除(自用水文)

目录 位运算实现加法 位运算实现减法 位运算实现乘法 位运算实现除法 代码示例 PS&#xff1a;用位运算实现的加减乘除&#xff0c;其数据都是整型的(int、char、size_t等&#xff09; 位运算实现加法 LeetCode_2.两数相加_小白麋鹿的博客-CSDN博客https://yt030917.blo…

【Jmeter第一章】Jmeter实操详细教程(快速入门)

文章目录 1、前言2、Jmeter介绍3、Jmeter下载安装4、Jmeter快速入门4.1、切换为中文显示4.2、基本使用 总结 1、前言 本篇内容为Jmeter的简单使用介绍&#xff0c;是基础的使用技巧&#xff0c;希望能帮到各位&#xff0c;不足之处还望多多包涵&#xff0c;最后感谢您的阅览。…

ChatGPT工作提效之初探路径独孤九剑遇强则强

ChatGPT工作提效之遇强则强 前言一、如何使用ChatGPT二、ChatGPT实战应用三、ChatGPT会叫的小孩有奶吃工具类的交互问答类的交互开发类的交互 前言 读《笑傲江湖》西湖比剑时&#xff0c;对于独孤九剑1的解读印象颇为深刻。令狐冲被任我行这个高手激发出许多精妙的剑招。这独孤…

【原创】企业级别的Kafka配置--按照市场分区

企业级别的Kafka配置--按照市场分区 背景--Kafka广播按照市场分区生产者和消费者设计方案Kafka Broker设计消费消息时增加过滤条件消费者端利用多线程/多协程机制提高吞吐量 背景–Kafka广播 对于同一个Topic来说&#xff0c;每个消费者组都可以拿到这个Topic中的全部数据。消…