【WEEK14】 【DAY4】Swagger第二部分【中文版】

2024.5.30 Thursday
接上文【WEEK14】 【DAY3】Swagger第一部分【中文版】

目录

  • 16.4.配置扫描接口
    • 16.4.1.修改SwaggerConfig.java
      • 16.4.1.1.使用.basePackage()方法指定扫描的包路径
      • 16.4.1.2.其他扫描方式均可在RequestHandlerSelectors.class中查看源码
    • 16.4.2.仍然是修改SwaggerConfig.java
      • 16.4.2.1.配置接口扫描过滤
      • 16.4.2.2.其他方法:
  • 16.5.配置Swagger开关
    • 16.5.1.修改enable的值关闭使用swagger
    • 16.5.2.动态配置当项目处于test、dev环境时显示swagger,处于prod时不显示
      • 16.5.2.1.修改SwaggerConfig
      • 16.5.2.2.修改application.properties
      • 16.5.2.3.新建application-dev.properties
      • 16.5.2.4.新建application-pro.properties
      • 16.5.2.5.重启

16.4.配置扫描接口

构建Docket时通过select()方法配置扫描接口的方式

16.4.1.修改SwaggerConfig.java

16.4.1.1.使用.basePackage()方法指定扫描的包路径

package com.P47.config;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
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 springfox.documentation.swagger2.annotations.EnableSwagger2;

import java.util.ArrayList;

@Configuration  //等价于@Component
@EnableSwagger2 //开启Swagger2
public class SwaggerConfig {
    //配置了Swagger的bean实例Docket,以配置Swagger的具体参数
    @Bean
    public Docket docket(){
        return new Docket(DocumentationType.SWAGGER_2)  //源码见DocumentationType.classpublic class DocumentationType extends SimplePluginMetadata方法,选择符合当前版本的进行编辑
                .apiInfo(apiInfo()) //public Docket(DocumentationType documentationType)方法点开ApiInfo进入ApiInfo.class
                .select()   //通过.select()方法,去配置扫描接口,RequestHandlerSelectors配置如何扫描接口
                .apis(RequestHandlerSelectors.basePackage("com.P47.controll"))
                .build();
        //点击进入Docket.class可见各类方法源码
    }

    //配置Swagger信息(apiInfo)
    private ApiInfo apiInfo(){

        //防止DEFAULT_CONTACT(名字改成了contact)报错
        Contact contact = new Contact("联系人名字", "联系人访问链接", "联系人邮箱");

        return new ApiInfo("Swagger Api Documentation", //标题
                "Api Documentation 描述", //描述
                "version 1.0",  //版本号
                "http://terms.service.url",  //组织链接
                contact,    //联系人信息
                "Apache 2.0",   //许可
                "http://www.apache.org/licenses/LICENSE-2.0",   //许可链接
                new ArrayList<>() //扩展
        );
    }
}

重启后查看:只剩hello-controller栏
在这里插入图片描述

16.4.1.2.其他扫描方式均可在RequestHandlerSelectors.class中查看源码

basePackage(final String basePackage) // 根据包路径扫描接口
any() // 扫描所有,项目中的所有接口都会被扫描到
none() // 不扫描接口

withMethodAnnotation(final Class<? extends Annotation> annotation)  // 通过方法上的注解扫描,如withMethodAnnotation(GetMapping.class)只扫描get请求
withClassAnnotation(final Class<? extends Annotation> annotation)   // 通过类上的注解扫描,如.withClassAnnotation(Controller.class)只扫描有controller注解的类中的接口

16.4.2.仍然是修改SwaggerConfig.java

16.4.2.1.配置接口扫描过滤

添加以下过滤

.paths(PathSelectors.ant("/P47/**"))    //点击path查看初始化private Predicate<String> pathSelector; 这里以.ant()方法为例,只扫描请求以/P47开头的接口

重启后查看:没有显示任何方法
在这里插入图片描述

16.4.2.2.其他方法:

在这里插入图片描述
此时修改后的完整代码

package com.P47.config;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
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 springfox.documentation.swagger2.annotations.EnableSwagger2;

import java.util.ArrayList;

@Configuration  //等价于@Component
@EnableSwagger2 //开启Swagger2
public class SwaggerConfig {
    //配置了Swagger的bean实例Docket,以配置Swagger的具体参数
    @Bean
    public Docket docket(){
        return new Docket(DocumentationType.SWAGGER_2)  //源码见DocumentationType.classpublic class DocumentationType extends SimplePluginMetadata方法,选择符合当前版本的进行编辑
                .apiInfo(apiInfo()) //public Docket(DocumentationType documentationType)方法点开ApiInfo进入ApiInfo.class
                .select()   //通过.select()方法,去配置扫描接口,RequestHandlerSelectors配置如何扫描接口
                .apis(RequestHandlerSelectors.basePackage("com.P47.controll"))  //使用basePackage指定要扫描的包
                .paths(PathSelectors.ant("/P47/**"))    //点击path查看初始化private Predicate<String> pathSelector; 这里以.ant()方法为例,只扫描请求以/P47开头的接口
                .build();
        //点击进入Docket.class可见各类方法源码

        /*RequestHandlerSelectors.方法
        basePackage(final String basePackage) // 根据包路径扫描接口
        any() // 扫描所有,项目中的所有接口都会被扫描到
        none() // 不扫描接口

        withMethodAnnotation(final Class<? extends Annotation> annotation)  // 通过方法上的注解扫描,如withMethodAnnotation(GetMapping.class)只扫描get请求
        withClassAnnotation(final Class<? extends Annotation> annotation)   // 通过类上的注解扫描,如.withClassAnnotation(Controller.class)只扫描有controller注解的类中的接口
        */

        /*PathSelectors.方法
        any() // 任何请求都扫描
        none() // 任何请求都不扫描
        regex(final String pathRegex) // 通过正则表达式控制
        ant(final String antPattern) // 通过ant()控制
        */
    }

    //配置Swagger信息(apiInfo)
    private ApiInfo apiInfo(){

        //防止DEFAULT_CONTACT(名字改成了contact)报错
        Contact contact = new Contact("联系人名字", "联系人访问链接", "联系人邮箱");

        return new ApiInfo("Swagger Api Documentation", //标题
                "Api Documentation 描述", //描述
                "version 1.0",  //版本号
                "http://terms.service.url",  //组织链接
                contact,    //联系人信息
                "Apache 2.0",   //许可
                "http://www.apache.org/licenses/LICENSE-2.0",   //许可链接
                new ArrayList<>() //扩展
        );
    }
}

16.5.配置Swagger开关

修改SwaggerConfig.java

16.5.1.修改enable的值关闭使用swagger

@Bean
public Docket docket(){
    return new Docket(DocumentationType.SWAGGER_2)  //源码见DocumentationType.classpublic class DocumentationType extends SimplePluginMetadata方法,选择符合当前版本的进行编辑
            .apiInfo(apiInfo()) //public Docket(DocumentationType documentationType)方法点开ApiInfo进入ApiInfo.class
            .enable(false)  //是否启动swagger,false则不能启动,此时访问页面显示:😱 Could not render e, see the console.

            .select()   //通过.select()方法,去配置扫描接口,RequestHandlerSelectors配置如何扫描接口
            //.apis(RequestHandlerSelectors.basePackage("com.P47.controll"))  //使用basePackage指定要扫描的包
            //.paths(PathSelectors.ant("/P47/**"))    //点击path查看初始化private Predicate<String> pathSelector; 这里以.ant()方法为例,只扫描请求以/P47开头的接口
            .build();

}

重启:
在这里插入图片描述

16.5.2.动态配置当项目处于test、dev环境时显示swagger,处于prod时不显示

16.5.2.1.修改SwaggerConfig

@Bean
public Docket docket(Environment environment){

    // 设置要显示swagger的环境
    Profiles profiles = Profiles.of("dev", "test");
    // 判断当前是否处于该环境
    // 通过 enable() 接收此参数判断是否要显示
    boolean flag = environment.acceptsProfiles(profiles);

    return new Docket(DocumentationType.SWAGGER_2)  //源码见DocumentationType.classpublic class DocumentationType extends SimplePluginMetadata方法,选择符合当前版本的进行编辑
            .apiInfo(apiInfo()) //public Docket(DocumentationType documentationType)方法点开ApiInfo进入ApiInfo.class
            .enable(flag)  //是否启动swagger,false则不能启动,此时访问页面显示:😱 Could not render e, see the console.

            .select()   //通过.select()方法,去配置扫描接口,RequestHandlerSelectors配置如何扫描接口
            //.apis(RequestHandlerSelectors.basePackage("com.P47.controll"))  //使用basePackage指定要扫描的包
            //.paths(PathSelectors.ant("/P47/**"))    //点击path查看初始化private Predicate<String> pathSelector; 这里以.ant()方法为例,只扫描请求以/P47开头的接口
            .build();

}

此时完整的代码:

package com.P47.config;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.env.Environment;
import org.springframework.core.env.Profiles;
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 springfox.documentation.swagger2.annotations.EnableSwagger2;

import java.util.ArrayList;

@Configuration  //等价于@Component
@EnableSwagger2 //开启Swagger2
public class SwaggerConfig {
    //配置了Swagger的bean实例Docket,以配置Swagger的具体参数
    @Bean
    public Docket docket(Environment environment){

        // 设置要显示swagger的环境
        Profiles profiles = Profiles.of("dev", "test");
        // 判断当前是否处于该环境
        // 通过 enable() 接收此参数判断是否要显示
        boolean flag = environment.acceptsProfiles(profiles);

        return new Docket(DocumentationType.SWAGGER_2)  //源码见DocumentationType.classpublic class DocumentationType extends SimplePluginMetadata方法,选择符合当前版本的进行编辑
                .apiInfo(apiInfo()) //public Docket(DocumentationType documentationType)方法点开ApiInfo进入ApiInfo.class
                .enable(flag)  //是否启动swagger,false则不能启动,此时访问页面显示:😱 Could not render e, see the console.

                .select()   //通过.select()方法,去配置扫描接口,RequestHandlerSelectors配置如何扫描接口
                //.apis(RequestHandlerSelectors.basePackage("com.P47.controll"))  //使用basePackage指定要扫描的包
                //.paths(PathSelectors.ant("/P47/**"))    //点击path查看初始化private Predicate<String> pathSelector; 这里以.ant()方法为例,只扫描请求以/P47开头的接口
                .build();

    }

    //配置Swagger信息(apiInfo)
    private ApiInfo apiInfo(){

        //防止DEFAULT_CONTACT(名字改成了contact)报错
        Contact contact = new Contact("联系人名字", "联系人访问链接", "联系人邮箱");

        return new ApiInfo("Swagger Api Documentation", //标题
                "Api Documentation 描述", //描述
                "version 1.0",  //版本号
                "http://terms.service.url",  //组织链接
                contact,    //联系人信息
                "Apache 2.0",   //许可
                "http://www.apache.org/licenses/LICENSE-2.0",   //许可链接
                new ArrayList<>() //扩展
        );
    }
}

16.5.2.2.修改application.properties

spring.application.name=swagger-demo
spring.mvc.pathmatch.matching-strategy=ant_path_matcher
spring.profiles.active=dev

16.5.2.3.新建application-dev.properties

#生产环境
server.port=8081

16.5.2.4.新建application-pro.properties

#测试环境
server.port=8082

16.5.2.5.重启

访问http://localhost:8081/swagger-ui.html
在这里插入图片描述
将application.properties中配置改为spring.profiles.active=pro,访问http://localhost:8082/swagger-ui.html无法进入swagger页面。
在这里插入图片描述
同理,如果不写spring.profiles.active指定文件,默认端口是8080,由于此时在SwaggerConfig中的配置,http://localhost:8080/swagger-ui.html也不可访问swagger。
在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

HttpSecurity 是如何组装过滤器链的

有小伙伴们问到这个问题&#xff0c;简单写篇文章和大伙聊一下。 一 SecurityFilterChain 首先大伙都知道&#xff0c;Spring Security 里边的一堆功能都是通过 Filter 来实现的&#xff0c;无论是认证、RememberMe Login、会话管理、CSRF 处理等等&#xff0c;各种功能都是通…

solr-8.11.3

https://solr.apache.org/downloads.html https://archive.apache.org/dist/solr/solr/ F:\Document_Solr.apache.org\solr-8.11.3\bin Microsoft Windows [版本 10.0.19045.2965] (c) Microsoft Corporation。保留所有权利。 C:\Users\Administrator>F: F:\> F:\>…

为啥装了erlang,还报错erl: command not found?

转载说明&#xff1a;如果您喜欢这篇文章并打算转载它&#xff0c;请私信作者取得授权。感谢您喜爱本文&#xff0c;请文明转载&#xff0c;谢谢。 问题背景&#xff1a; 在一台不通外网的服务器上装rabbitmq&#xff0c;然后在启动的时候&#xff0c;遇到了报错 “/usr/lib/…

linux可观测性ebpf(一) ----------- 环境搭建

参考书籍 开发环境 Ubuntu 18.04.6 LTS (GNU/Linux 5.4.0-150-generic x86_64) 1.1 下载内核源码 cd /usr/src/ sudo git clone -b v5.4 https://github.com/torvalds/linux.git1.2 下载书中代码 git clone https://github.com/bpftools/linux-observability-with-bpf1.3 编…

LeetCode2300咒语和药水的成功对数

题目描述 解析 先对药水排序后每个咒语去二分查找最低满足的药水的位置。 class Solution {public int[] successfulPairs(int[] spells, int[] potions, long success) {int n spells.length, m potions.length;Arrays.sort(potions);for (int i 0; i < n; i) {long ta…

亚信安慧AntDB数据库与华为数据存储完成兼容性互认证

迎接数智时代&#xff0c;供给核心科技。日前&#xff0c;湖南亚信安慧科技有限公司&#xff08;简称&#xff1a;亚信安慧&#xff09;与华为技术有限公司&#xff08;简称&#xff1a;华为&#xff09;&#xff0c;完成了AntDB数据库产品与OceanProtect备份一体机及Oceanstor…

PHP框架开发的内容付费问答解惑系统附带seo优化

default默认是百度问答模板 sowenda是高仿360问答的。 soso模板是仿腾讯soso问答界面。 一套wap模板&#xff0c;仿天涯问答的手机版。 pc和wap模板后台设置里自由切换&#xff0c;还可以绑定手机独立二级域名。 强大的搜索功能&#xff0c;支持xunsearch全文检索&#xff0c;s…

代码随想录——二叉搜索树的最小绝对差(Leetcode530)

题目链接 层序遍历 /*** Definition for a binary tree node.* public class TreeNode {* int val;* TreeNode left;* TreeNode right;* TreeNode() {}* TreeNode(int val) { this.val val; }* TreeNode(int val, TreeNode left, TreeNode right) …

Docker中布置Jenkins实现Android项目的自动化构建

因项目需要&#xff0c;要在服务器上使用Jenkins完成Android项目的自动化构建&#xff0c;但服务器上登录的账户没有管理员权限&#xff0c;无法用sudo命令&#xff0c;因此需要把相应环境布置在docker中。 环境搭建 docker容器相关命令 创建容器 docker create -it contai…

跨境物流系统选择标准:能充分试用,合作灵活的才是好系统

对国际物流商而言&#xff0c;大家都知道跨境物流系统对业务优化有多重要。但是想选择一套适合自己的跨境物流系统却并不是一件简单的事情。 最主要的原因就是现在市场上的国际物流系统确实太多了。不同的功能设计&#xff0c;定价设计&#xff0c;让物流商非常头疼&#xff0…

基于Lumerical fdtd进行无序光子晶体波导的仿真设计及优化

光子晶体是一类通过不同折射率介质周期性的排列而形成的具有光波长量级的周期性人工微型结构&#xff0c;相比于传统晶体来说&#xff0c;由于介电函数的周期性分布&#xff0c;光子晶体也会产生一些类似于传统晶体的带隙&#xff0c;使光局域在带隙中无法传播。我们在完整的光…

JavaScript解构赋值

一、数组解构 以上要么不好记忆&#xff0c;要么书写麻烦&#xff0c;此时可以使用解构赋值的方法让代码更简洁。 数组解构是将数组的单元值快速批量赋值给一系列变量的简洁语法。 基本语法&#xff1a; 1、赋值运算符左侧的[]用于批量声明变量&#xff0c;右侧数组的单元值将…

轻量级动态可监控线程池 - DynamicTp

一、背景介绍 使用线程池ThreadPoolExecutor的过程中你是否有以下痛点呢&#xff1f; 代码中创建了一个 ThreadPoolExecutor&#xff0c;但是不知道那几个核心参数设置多少比较合适凭经验设置参数值&#xff0c;上线后发现需要调整&#xff0c;改代码重新发布服务&#xff0c…

关于ida如何进行远程linux调试(详解)

首先我们需要安装工具软件VMware虚拟机和finalshell&#xff0c;并在虚拟机中安装centos 7系统&#xff0c;还要将finalshell连接到该系统中&#xff0c;具体操作可以去b站搜黑马Linux学习&#xff0c;学完该课程的p5&#xff0c;p6&#xff0c;p8即可&#xff0c;我接下来讲的…

api网关kong对高频的慢接口进行熔断

一、背景 在生产环境&#xff0c;后端服务的接口响应非常慢&#xff0c;是因为数据库未创建索引导致。 如果QPS低的时候&#xff0c;因为后端服务有6个高配置的节点&#xff0c;虽然接口慢&#xff0c;还未影响到服务的正常运行。 但是&#xff0c;当QPS很高的时候&#xff0c…

顶级手机数据恢复软件 [2024 更新]

什么是最好的手机数据恢复软件&#xff1f;在这篇文章中&#xff0c;您将免费了解 6 款最佳手机数据恢复软件&#xff0c;并了解有关如何恢复数据的完整指南。 什么是最好的手机数据恢复软件&#xff1f; 手机数据恢复软件是从智能手机中检索丢失或删除的文件&#xff0c;消息…

(自适应手机端)响应式服装服饰外贸企业网站模板

(自适应手机端)响应式服装服饰外贸企业网站模板PbootCMS内核开发的网站模板&#xff0c;该模板适用于服装服饰网站、外贸网站等企业&#xff0c;当然其他行业也可以做&#xff0c;只需要把文字图片换成其他行业的即可&#xff1b;自适应手机端&#xff0c;同一个后台&#xff0…

Linux 深入讲解自动化构建工具

各位大佬好 &#xff0c;这里是阿川的博客 &#xff0c; 祝您变得更强 个人主页&#xff1a;在线OJ的阿川 大佬的支持和鼓励&#xff0c;将是我成长路上最大的动力 阿川水平有限&#xff0c;如有错误&#xff0c;欢迎大佬指正 Linux一系列的文章&#xff08;质量分均在93分…

Netty中半包粘包的产生与处理:短连接、固定长度、固定分隔符、预设长度;redis、http协议举例;网络数据的发送和接收过程

目录 粘包、半包 相关概念 网络数据发送和接收过程 Netty半包粘包解决方案 ByteBuf获取和默认大小 短链接 固定长度 固定分隔符 预设长度 常见协议代码举例 redis协议 http协议 参考链接 粘包、半包 相关概念 程序处理过程中我们会通过缓冲区接收数据&#xff0c…

BearPi-HM Nano开发笔记

小熊派 简单介绍 BearPi-HM Nano开发板是一块专门为鸿蒙OS设计的HarmonyOS开发板&#xff0c;板载高度集成的2.4GHz WLAN SoC芯片Hi3861&#xff0c;并板载NFC电路及标准的E53接口可拓展 E53接口 介绍 E53接口标准为“物联网俱乐部”联合国内多家开发板厂家制定的物联网案…