Swagger学习使用

news2024/11/16 13:38:31

swagger升级导致访问ui页面地址不一样

方式一

依赖

<parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>1.5.3.RELEASE</version>
 </parent>
<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>

启用Swagger2

@EnableSwagger2
@SpringBootApplication
public class AmisProjectApplication extends SpringBootServletInitializer{

    public static void main(String[] args) {
        SpringApplication.run(AmisProjectApplication.class,args);
    }

    //使用外部tomcat启动项目要重写该方法
    @Override
    protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
        return builder.sources(AmisProjectApplication.class);
    }
}

定义Swagger配置类

package com.xysd.amisproject;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import springfox.documentation.builders.ApiInfoBuilder;
import springfox.documentation.builders.ParameterBuilder;
import springfox.documentation.builders.PathSelectors;
import springfox.documentation.builders.RequestHandlerSelectors;
import springfox.documentation.schema.ModelRef;
import springfox.documentation.service.ApiInfo;
import springfox.documentation.service.Parameter;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spring.web.plugins.Docket;

import java.util.ArrayList;
import java.util.List;

@Configuration
public class SwaggerConfig {
    @Bean
    public Docket createApiDocket() {
        ParameterBuilder tokenPar = new ParameterBuilder();
        List<Parameter> pars = new ArrayList<Parameter>();
        tokenPar.parameterType("header")//参数类型支持header, cookie, body, query etc
                .name("access_token")//参数名
                .defaultValue("")//默认值
                .description("令牌")//描述信息
                .modelRef(new ModelRef("string"))//指定参数值的类型
                .required(false)//非必需,这里是全局配置
                .build();
        pars.add(tokenPar.build());
        //根据配置文件项 swagger是否启用,禁用
        return new Docket(DocumentationType.SWAGGER_2)
                .globalOperationParameters(pars)
                .apiInfo(apiInfo())
                .enable(true)
                .select()
                .apis(RequestHandlerSelectors.basePackage("com.xysd.amisproject"))
                .paths(PathSelectors.ant("/api/**"))
                .build().groupName("对外API接口文档");

    }

    @Bean
    public Docket create_ApiDocket() {
        ParameterBuilder tokenPar = new ParameterBuilder();
        List<Parameter> pars = new ArrayList<Parameter>();
        tokenPar.parameterType("header")//参数类型支持header, cookie, body, query etc
                .name("access_token")//参数名
                .defaultValue("")//默认值
                .description("令牌")//描述信息
                .modelRef(new ModelRef("string"))//指定参数值的类型
                .required(false)//非必需,这里是全局配置
                .build();
        pars.add(tokenPar.build());
        //根据配置文件项 swagger是否启用,禁用
        return new Docket(DocumentationType.SWAGGER_2)
                .globalOperationParameters(pars)
                .apiInfo(apiInfo())
                .enable(true)
                .select()
                .apis(RequestHandlerSelectors.basePackage("com.xysd.amisproject"))
                .paths(PathSelectors.ant("/_api/**"))
                .build().groupName("对内API接口文档");

    }

    private ApiInfo apiInfo() {
        return new ApiInfoBuilder()
                .title("AMIS-PROJECT")
                .description("AMIS-PROJECT接口文档")
                .termsOfServiceUrl("")
                .version("1.0")
                .build();
    }

}

测试

启动本地服务
访问地址
http://localhost:8000/amis-project/swagger-ui.html

效果图

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

方式二

依赖

<parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.5.6.RELEASE</version>
</parent>
<dependency>
    <groupId>io.springfox</groupId>
    <artifactId>springfox-boot-starter</artifactId>
    <version>3.0.0</version>
</dependency>

启用Swagger2


@EnableSwagger2
@SpringBootApplication
public class AmisProjectApplication extends SpringBootServletInitializer{

    public static void main(String[] args) {
        SpringApplication.run(AmisProjectApplication.class,args);
    }

    //使用外部tomcat启动项目要重写该方法
    @Override
    protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
        return builder.sources(AmisProjectApplication.class);
    }
}

定义配置类

package com.xysd.bizbase.resources;

import java.util.ArrayList;
import java.util.List;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import springfox.documentation.builders.ApiInfoBuilder;
import springfox.documentation.builders.PathSelectors;
import springfox.documentation.builders.RequestHandlerSelectors;
import springfox.documentation.builders.RequestParameterBuilder;
import springfox.documentation.service.ApiInfo;
import springfox.documentation.service.ParameterType;
import springfox.documentation.service.RequestParameter;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spring.web.plugins.Docket;

@Configuration
public class SwaggerConfig {
    
    @Value("${swagger.sysName:''}")
    private String swaggerSysName;
    
    @Bean
    public Docket createApiDocket() {
        List<RequestParameter> pars = new ArrayList<RequestParameter>();
        RequestParameterBuilder tokenPar = new RequestParameterBuilder();
        tokenPar.in(ParameterType.HEADER)//参数类型支持header, cookie, body, query etc
                .name("access_token")//参数名
                .description("令牌")//描述信息
                .required(false)//非必需,这里是全局配置
                //.query(sb -> sb.defaultValue("1").allowEmptyValue(true)) //指定默认值 指定是否必填
                ;
        pars.add(tokenPar.build());
        
        return new Docket(DocumentationType.OAS_30)
                .globalRequestParameters(pars)
                .apiInfo(apiInfo())
                .select()
                .apis(RequestHandlerSelectors.basePackage("com.xysd"))
                .paths(PathSelectors.ant("/*/api/**").or(path -> path.contains("login")))
                .build()
                .groupName("对外API接口文档")
                ;
                
    }
    
    @Bean
    public Docket createRestDocket() {
        List<RequestParameter> pars = new ArrayList<RequestParameter>();
        RequestParameterBuilder tokenPar = new RequestParameterBuilder();
        tokenPar.in(ParameterType.HEADER)//参数类型支持header, cookie, body, query etc
                .name("access_token")//参数名
                .description("令牌")//描述信息
                .required(false)//非必需,这里是全局配置
                //.query(sb -> sb.defaultValue("1").allowEmptyValue(true)) //指定默认值 指定是否必填
                ;
        pars.add(tokenPar.build());
        
        return new Docket(DocumentationType.OAS_30)
                .globalRequestParameters(pars)
                .apiInfo(apiInfo())
                .select()
                .apis(RequestHandlerSelectors.basePackage("com.xysd"))
                .paths(PathSelectors.ant("/*/rest/**").or(path -> path.contains("login")))
                .build()
                .groupName("对外REST接口文档")
                ;
                
    }
    
    @Bean
    public Docket create_ApiDocket() {
        List<RequestParameter> pars = new ArrayList<RequestParameter>();
        RequestParameterBuilder tokenPar = null;
        
        tokenPar = new RequestParameterBuilder();
        tokenPar.in(ParameterType.HEADER)//参数类型支持header, cookie, body, query etc
                .name("access_token")//参数名
                .description("访问令牌")//描述信息
                .required(false)//非必需,这里是全局配置
                //.query(sb -> sb.defaultValue("1").allowEmptyValue(true)) //指定默认值 指定是否必填
                ;
        pars.add(tokenPar.build());
        
        tokenPar = new RequestParameterBuilder();
        tokenPar.in(ParameterType.HEADER)//参数类型支持header, cookie, body, query etc
                .name("inner_token")//参数名
                .description("内部令牌")//描述信息
                .required(false)//非必需,这里是全局配置
                //.query(sb -> sb.defaultValue("1").allowEmptyValue(true)) //指定默认值 指定是否必填
                ;
        pars.add(tokenPar.build());
        
        return new Docket(DocumentationType.OAS_30)
                .globalRequestParameters(pars)
                .apiInfo(apiInfo())
                .select()
                .apis(RequestHandlerSelectors.basePackage("com.xysd"))
                .paths(PathSelectors.ant("/*/_api/**"))
                .build()
                .groupName("对内_API接口文档")
                ;
    }
    
    private ApiInfo apiInfo() {
        return new ApiInfoBuilder()
                .title(swaggerSysName+"接口文档")
                .description(swaggerSysName+"接口文档")
                //.termsOfServiceUrl("")
                .version("1.0")
                .build();
    }
    
}

测试

启动服务
访问地址
http://localhost:8000/amis-project/swagger-ui/index.html

效果图

在这里插入图片描述

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

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

相关文章

云打印机怎么连接手机?

现在越来越多的人使用手机来办公或学习。而当我们需要打印文件时,如何用云打印机连接手机就非常重要了。易绘创云打印服务非常实用&#xff0c;那么易绘创云打印机又该怎么连接手机&#xff1f;下面就让我们一起来了解吧。 云打印机怎么连接手机&#xff1f; 当下云打印机连接…

adb 无线连接 操作Android设备

最近集五福活动比较热门 可以用这个工具 用自己擅长的语言写一个循环程序 运行起来就可以 自动帮我们 看视频得福卡了 很方便 while (true) {sleep(mt_rand(15, 25));system(adb shell input swipe 500 2000 500 1000 100); } 1. 首先下载 安卓开发工具 adb adb网盘链接 链接…

第17次修改了可删除可持久保存的前端html备忘录:增加年月日星期,增加倒计时,更改保存区名称可以多个备忘录保存不一样的信息,匹配背景主题:现代深色

第17次修改了可删除可持久保存的前端html备忘录&#xff1a;增加年月日星期&#xff0c;增加倒计时&#xff0c;更改保存区名称可以多个备忘录保存不一样的信息&#xff0c;匹配背景主题&#xff1a;现代深色 备忘录代码&#xff1a; <!DOCTYPE html> <html lang&quo…

C#用正则表达式判断字符串是否纯数字vs用Char.IsDigit 方法遍历字符数组是否纯数字

目录 一、使用的方法 1.正则表达式 2.Char.IsDigit 方法 二、源码 1.源代码 2.生成效果 一、使用的方法 1.正则表达式 在程序运行过程中&#xff0c;经常需要用户输入数字信息&#xff0c;如输入员工年龄、工资等。使用正则表达式Regex类的IsMatch方法&#xff0c;可以有…

配置IPv6静态路由

1、静态路由简介 静态路由是一种需要管理员手工配置的特殊路由。 静态路由在不同网络环境中有不同的目的&#xff1a; 当网络结构比较简单时&#xff0c;只需配置静态路由就可以使网络正常工作。 在复杂网络环境中&#xff0c;配置静态路由可以改进网络的性能&#xff0c;并…

Python武器库开发-武器库篇之pdf文件暴力破解(五十二)

Python武器库开发-武器库篇之pdf文件暴力破解(五十二) PDF&#xff08;Portable Document Format&#xff0c;便携式文档格式&#xff09;是由Adobe公司开发的一种文件格式。PDF文件被广泛用于以可靠方式共享和传输电子文档。它能够保留文档的原始格式&#xff0c;包括字体、图…

了解 Redis Channel:消息传递机制、发布与订阅,以及打造简易聊天室的实战应用。

文章目录 1. Redis Channel 是什么2. Redis-Cli 中演示使用3. 利用 Channel 打造一个简易的聊天室参考文献 1. Redis Channel 是什么 Redis Channel 是一种消息传递机制&#xff0c;允许发布者向特定频道发布消息&#xff0c;而订阅者则通过订阅频道实时接收消息。 Redis Cha…

uniapp基于Android平台的古诗词学习挑战系统 微信小程序_b7obw

APP性能需求 &#xff08;1&#xff09;用户在安卓APP页面各种操作可及时得到反馈。 &#xff08;2&#xff09;该平台是提供给多个用户使用的平台&#xff0c;用户使用之前需要注册登录。登录验证后&#xff0c;用户才可进行各种操作[10]。 &#xff08;3&#xff09;管理员用…

【CSS3】flex布局实践篇 | 7种常见网页布局方案

1、垂直居中 垂直居中一度是前端面试时必问知识点。 目前的垂直解决方案 使用了 从负外边距 到 display:table-cell 等荒谬的奇技淫巧&#xff0c;包括全高的伪元素。这些方法是又复杂又难写。 不知道大家第一次使用flex布局做什么&#xff0c;反正我是用来做垂直居中&#xf…

<网络安全>《12 数据库安全审计系统》

1 概念 数据库安全审计系统通过对用户访问数据库行为的记录、分析和汇报&#xff0c;来帮助用户事后生成合规报告、事故追根溯源&#xff0c;同时通过大数据搜索技术提供高效查询审计报告&#xff0c;定位事件原因&#xff0c;以便日后查询、分析、过滤&#xff0c;实现加强内…

【iOS ARKit】手动配置环境探头

在上节中我们已经了解了环境探头以及如何使用自动环境探头&#xff0c;这节一起了解如何使用手动配置环境探头。 在使用自动环境反射时&#xff0c;开发人员无须进行有关环境反射的任何操作&#xff0c;只需要设置自动环境反射即可&#xff0c;其余工作完全由 RealityKit 自动完…

TRIZ经典矛盾矩阵.exe

TRIZ经典矛盾矩阵.exe 一、概要二、技术细节I&#xff0e;函数open_dialog&#xff08;&#xff09;和open_version_dialog&#xff08;&#xff09;II&#xff0e;函数resolvent&#xff08;&#xff09;III&#xff0e;函数Invention_Principle_Content&#xff08;&#xff…

Log4j2-24-log4j2 相同的日志打印 2 次

现象 相同的日志打印了两次&#xff0c;且因为日志的配置不同&#xff0c;导致脱敏的情况不一致。 代码与配置 代码 package com.ryo.log4j2.cfg.additivity;import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger;public class SimpleDemo…

蓝桥杯省赛无忧 编程14 肖恩的投球游戏加强版

#include <stdio.h> #define MAX_N 1003 int a[MAX_N][MAX_N], d[MAX_N][MAX_N]; // 差分数组的初始化 void init_diff(int n, int m) {for (int i 1; i < n; i) {for (int j 1; j < m; j) {d[i][j] a[i][j] - a[i-1][j] - a[i][j-1] a[i-1][j-1];}} } // 对差…

oracle数仓rac两个节点查询耗时不一致问题处理

问题描述 数据库节点1查询比节点2查询慢。现场操作应用发现发现同一sql语句在节点2上只要2分钟左右&#xff0c;在节点1&#xff0c;该条sql执行要超过30分钟。 处理过程 根据问题&#xff0c;初步判断是由于错误的执行计划&#xff0c;导致性能问题&#xff0c;但实际上对两…

【云原生】docker容器实现https访问

目录 步骤一&#xff1a;在宿主机生成服务端的公钥证书和私钥文件 步骤二&#xff1a;准备Dockerfile文件构建镜像 步骤三&#xff1a;docker run启动容器并将其映射到443端口 步骤一&#xff1a;在宿主机生成服务端的公钥证书和私钥文件 //生成ca证书 &#xff08;1&#x…

0131-2-关于事件捕获和冒泡

关于事件捕获和冒泡 DOM事件流分为三个阶段&#xff1a;捕获阶段、目标阶段、冒泡阶段 点击目标元素后&#xff0c;不会马上触发目标元素&#xff0c;而是先执行事件捕获&#xff0c;从顶部逐步到目标元素&#xff1b;处于目标阶段的时候触发目标元素&#xff1b;最后冒泡阶段…

随机 Transformer

在这篇博客中&#xff0c;我们将通过一个端到端的示例来讲解 Transformer 模型中的数学原理。我们的目标是对模型的工作原理有一个良好的理解。为了使内容易于理解&#xff0c;我们会进行大量简化。我们将减少模型的维度&#xff0c;以便我们可以手动推理模型的计算过程。例如&…

CSS 3D三角彩色锥形旋转动画效果

<template><view class="pyramid-loader"><view class="wrapper"><span class="side side1"></span> <!-- 金字塔的一个面 --><span class="side side2"></span> <!-- 金字塔的…

基于stm32F4卷积神经网络手写数字识别项目

加我微信hezkz17 可以申请加入嵌入式人工智能技术研究开发交流答疑群&#xff0c;赠送企业嵌入式AI 图像理解/音/视频项目核心开发资料 1 采用CNN BP反向传播算法更新权重系数 2 原理解析 3 实现策略 训练与识别分离&#xff0c;先在电脑上训练好CNN BP神经网络的模型&#…