公司已有springboot项目引入swagger

news2024/11/17 0:45:52

公司已有springboot项目引入swagger

1、swagger介绍

官网:https://swagger.io/

Swagger 是一个用于生成、描述和调用 RESTful 接口的 Web 服务。通俗的来讲,Swagger 就是将项目中所有(想要暴露的)接口展现在页面上,并且可以进行接口调用和测试的服务

2、引入目的

Swagger 有以下 3 个重要的作用:将项目中所有的接口展现在页面上,这样后端程序员就不需要专门为前端使用者编写专门的接口文档;当接口更新之后,只需要修改代码中的 Swagger 描述就可以实时生成新的接口文档了,从而规避了接口文档老旧不能使用的问题;通过 Swagger 页面,我们可以直接进行接口调用,方便我们开发。

3、引入相关依赖

在pom.xml中加入相关依赖

    <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>

image-20230519095833335

4、测试

4.1创建一个controller类 SwaggerTestController

package com.zoweunion.mechanic.controller;


import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RequestMapping("/swaggerTest")
public class SwaggerTestController {

    @PostMapping("/hello")
    public String hello(String str){
        return "hello,"+str;
    }


}

4.2创建一个SwaggerConfig配置文件

package com.zoweunion.mechanic.config;

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

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

@Configuration
@EnableSwagger2//开始Swagger2
public class SwaggerConfig {


    //配置了Swagger 的Docket的bean实例
    @Bean
    public Docket docket(){

        ParameterBuilder ticketPar = new ParameterBuilder();
        List<Parameter> pars = new ArrayList<>();
        ticketPar.name("Authorization").description("token")//Token 以及Authorization 为自定义的参数,session保存的名字是哪个就可以写成那个
                .modelRef(new ModelRef("string")).parameterType("header")
                .required(false).build(); //header中的ticket参数非必填,传空也可以
        pars.add(ticketPar.build());    //根据每个方法名也知道当前方法在设置什么参数

        return new Docket(DocumentationType.SPRING_WEB)
                .apiInfo(apiInfo())
                .select()
                //RequestHandlerSelectors, 配置要扫描接口的方式
                //basePackage:指定要扫描的包
                //any():扫描全部
                //withClassAnnotation: 扫描类上的注解
                //withMethodAnnotation: 扫描方法上的注解
                .apis(RequestHandlerSelectors.basePackage("com.example.swagger.controller"))
                .build()
                .globalOperationParameters(pars);
    }

    //配置Swagger 信息=apiInfo
    private ApiInfo apiInfo(){
        return new ApiInfo(
                "Logistics Api",//文檔命名
                "test",//文檔描述
                "v1.0",//
                "http:127.0.0.1/",
                null,//contact
                "Apache 2.0",
                "http://www.apache.org/licenses/LICENSE-2.0",
                new ArrayList()
        );
    }
}

上面我们需要把 com.example.swagger.controller 改成自己项目的路径

image-20230519101857014

4.3解决问题

不出意外的话是会报错的

Error starting ApplicationContext. To display the conditions report re-run your application with 'debug' enabled.
2023-05-19 10:20:15.314 ERROR 2016 --- [  restartedMain] o.s.boot.SpringApplication               : Application run failed

org.springframework.context.ApplicationContextException: Failed to start bean 'documentationPluginsBootstrapper'; nested exception is java.lang.NoSuchMethodError: com.google.common.collect.FluentIterable.append(Ljava/lang/Iterable;)Lcom/google/common/collect/FluentIterable;
	at org.springframework.context.support.DefaultLifecycleProcessor.doStart(DefaultLifecycleProcessor.java:184) ~[spring-context-5.0.8.RELEASE.jar:5.0.8.RELEASE]
	at org.springframework.context.support.DefaultLifecycleProcessor.access$200(DefaultLifecycleProcessor.java:52) ~[spring-context-5.0.8.RELEASE.jar:5.0.8.RELEASE]
	at org.springframework.context.support.DefaultLifecycleProcessor$LifecycleGroup.start(DefaultLifecycleProcessor.java:356) ~[spring-context-5.0.8.RELEASE.jar:5.0.8.RELEASE]
	at org.springframework.context.support.DefaultLifecycleProcessor.startBeans(DefaultLifecycleProcessor.java:157) ~[spring-context-5.0.8.RELEASE.jar:5.0.8.RELEASE]
	at org.springframework.context.support.DefaultLifecycleProcessor.onRefresh(DefaultLifecycleProcessor.java:121) ~[spring-context-5.0.8.RELEASE.jar:5.0.8.RELEASE]
	at org.springframework.context.support.AbstractApplicationContext.finishRefresh(AbstractApplicationContext.java:885) ~[spring-context-5.0.8.RELEASE.jar:5.0.8.RELEASE]
	at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.finishRefresh(ServletWebServerApplicationContext.java:161) ~[spring-boot-2.0.4.RELEASE.jar:2.0.4.RELEASE]
	at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:553) ~[spring-context-5.0.8.RELEASE.jar:5.0.8.RELEASE]
	at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:140) ~[spring-boot-2.0.4.RELEASE.jar:2.0.4.RELEASE]

这里我们把新增的 SwaggerConfig 里的注解给注释掉,再重启应用,发现能正常运行

image-20230519103750757

4.3.1 尝试方案一 没成功

这里我们把原来的两个依赖替换成这一个

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

把 SwaggerConfig 里的 @EnableSwagger2 注解替换成这两个

@EnableSwagger2
@EnableWebMvc

image-20230519104133815

我这里的springboot 的版本是2.0.4 release

再次重启,还是不行

4.3.2 尝试方案二 成功

把上面的回滚到方案一之前,pom.xml回滚,去除@EnableWebMvc

再重新添加以下依赖

<!-- 解决FluentIterable.class找不到问题 -->
<dependency>
    <groupId>com.google.guava</groupId>
    <artifactId>guava</artifactId>
    <version>26.0-jre</version>
</dependency>
<!-- java8 不需要添加,高版本需要添加 -->
<dependency>
    <groupId>javax.xml.bind</groupId>
    <artifactId>jaxb-api</artifactId>
    <version>2.3.0</version>
</dependency>

在启动类加上 @EnableSwagger2 注解

image-20230519135814291

重启应用,发现应用能正常启动了,但是访问 http://127.0.0.1:8080/swagger-ui.html 是提示无法访问的

image-20230519135902203

这里要注意一下,这里的地址应该是你应用的地址后加上 /swagger-ui.html

而我项目的地址是 http://localhost:5051/mechanic ,所以我这边需要访问 http://localhost:5051/mechanic/swagger-ui.html

image-20230519144146099

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

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

相关文章

iOS版ChatGPT突然上线!Plus用户笑疯了!

大家好&#xff0c;我是五竹。 今天&#xff0c;ChatGPT官方在苹果的应用商店毫无征兆的上线了自己的App——ChatGPT的 iOS版正式上线&#xff0c;Android读者们留下了羡慕的眼泪。 仅仅睡个觉的时间就冲到了苹果商店免费榜第二名 商店里有很多三方的ChatGPTAPP&#xff0c;为…

Su+ELK实现网络监测(3)——实际应用配置

SuELK实现网络监测&#xff08;3&#xff09;——实际应用配置 Suricata一、启动项二、规则使用三、解析eve.json文件四、主要目录及文件位置 ElasticSearch一、启动项二、主要目录及文件位置 Logstash一、启动项二、配置项三、主要目录及文件位置 kibana一、启动项二、可视化三…

公司没有一个会自动化测试的,果断离职了····

面试问到离职原因&#xff0c;我想这是很多面试者的痛&#xff0c;包括我自己&#xff0c;曾经也被离职原因所坑过。 面试回答离职原因简直特么就是巨坑&#xff01; 话说最近我面试了个两三年经验的测试工程师&#xff0c;离职原因说出来就是砸自己的脚&#xff0c;真是感慨…

中间件(二)- Tomcat

中间件&#xff08;二&#xff09;- Tomcat 1. 什么是Tomcat&#xff1f;2. 安装tomcat(linux)2.1 下载2.2 安装2.3 配置环境变量并启动2.4 验证tomcat是否安装成功 1. 什么是Tomcat&#xff1f; Tomcat是一个开源、免费、轻量级的Web服务器。 Tomcat是Apache 软件基金会&…

XSS-labs-level1详解

访问题目url 我们分析一下代码层面&#xff1a; 接受名为“name”的GET参数并在页面上显示它。其中包含了一个对alert()的覆盖。当alert()被调用时&#xff0c;它将显示一个确认框提示&#xff0c;然后将页面重定向到“level2.php?keywordtest”的URL&#xff0c;这将把关键字…

Win10和Win11上设置VS(Visual Studio)默认以管理员权限权限启动设置方法

本次管理员权限启动 如果只需要当前启动为管理员权限&#xff0c;方法如下&#xff1a; 1、使用“开始”菜单 2、根据所使用的 Windows操作系统 版本&#xff0c;执行以下步骤之一&#xff1a; 在 Windows 10 中&#xff0c;打开“开始”菜单&#xff0c;然后滚动到 Visual S…

Mysql——SQL语言入门

1.创建数据库表 【1】创建数据库表t_student &#xff08;1&#xff09;创建数据库&#xff1a; &#xff08;2&#xff09;新建查询 &#xff08;3&#xff09;创建数据库表 ##单行注释 /* 多行注释 多行注释 *//* 建立一张用来存储学生信息的表 字段包含学号、姓名、性别、…

chatgpt赋能Python-python30_3__2

Python30-3**2 – 强大的Python解释器的介绍 Python30-32是一个开源的Python解释器&#xff0c;其名称表示30乘以3的平方&#xff0c;即2700&#xff0c;意味着它是Python 3的改进版本。Python30-32由一群志愿者开发&#xff0c;旨在提供一个高效、强大、易于使用的编程工具&a…

【ChatGPT】无需注册,无需科学上网,无需人工验证的速度超快的 ChatGPT

文章目录 一、ChatGPT介绍二、使用ChatGPT时经常遇到的一些问题三、一个让你呼吸顺畅的 ChatGPT 一、ChatGPT介绍 ChatGPT&#xff0c;全称聊天生成预训练转换器&#xff08;英语&#xff1a;Chat Generative Pre-trained Transformer&#xff09;&#xff0c;是OpenAI开发的人…

【数学建模】矩形桌子能放平(初等模型)

把一把四只脚的椅子往不平的地面上一放&#xff0c;通常只有三只脚着地&#xff0c;放不稳&#xff0c;然而只要稍挪动几次&#xff0c;就可以四脚着地&#xff0c;放稳了。如何解释这种现象&#xff1f; 1 模型假设 椅子四条腿一样长&#xff0c;椅脚与地面接触可视为一个点&…

【MCS-51】定时器原理

时间是我们设计功能模块时一个十分重要的输入或者衡量指标&#xff0c;而51单片机中就为我们提供了两个时域上的模块&#xff1a;定时器和计数器。它们可以帮助我们实现一些非实时性的功能&#xff1a;延迟、计时以及定时等。其中51单片机有两个16位的模块&#xff1a;定时器0&…

SCI论文总重复率29%,单篇重复达到了4%,请问可以了吗?

&#x1f449;&#x1f3fb;有小伙伴问&#xff1a;SCI论文查重29&#xff05;&#xff0c;有一篇跟导师之前发表的论文重复达到了4&#xff05;&#xff0c;请问可以吗&#xff1f;之前重复率是37&#xff05;&#xff0c;改了好久才改下来&#xff0c;但是感觉29&#xff05;…

劝你别去外包,干了三年,感觉废了一半....

先说一下自己的情况&#xff0c;大专生&#xff0c;19年通过校招进入杭州某个外包软件公司&#xff0c;干了接近3年的功能测试&#xff0c;今年年初&#xff0c;感觉自己不能够在这样下去了&#xff0c;长时间呆在一个舒适的环境会让一个人堕落! 而我已经在一个企业干了3年的功…

UWB技术在人员管理上的应用

UWB技术在人员管理上的应用 UWB 技术是一种新型的无线通信技术&#xff0c;主要用于低功耗数据快速传输以及室内静止或移动物体/人的定位跟踪与导航。在人员管理方面&#xff0c;UWB 技术有着广泛的应用&#xff0c;可以实现对人员的实时定位管理、历史轨迹追溯、电子围栏、巡…

ipa文件怎么安装到iPhone手机上?

无需越狱帮你把ipa文件安装到苹果手机上 E86苹果签名简介&#xff1a;点击可查看 很多人都知道apk文件是安卓的app应用程序文件名&#xff0c;但有人知道苹果ios的app应用程序app是什么样的文件名吗&#xff1f; 是ipa文件。 ipa文件由三个部分组成&#xff0c;payload目录下…

基于短核苷酸序列频率构建细菌系统发育树

谷禾健康 目前&#xff0c;原核生物的系统发育分类依赖于16S rRNA基因序列&#xff0c;这种序列在细菌中广泛存在且高度保守&#xff0c;但即使16S rDNA测序的结果显示某些细菌间序列相似性≥99%&#xff0c;但它们仍然不能被归为同一物种。因为基因序列中的一些保守区域并不一…

Doxygen源码分析: 子目录简要介绍

2023-05-18 23:56:46 ChrisZZ imzhuofoxmailcom Hompage https://github.com/zchrissirhcz 文章目录 1. doxygen 版本2. doxygen 目录结构.git 目录.github 目录workflows/build_cmake.ymlworkflows/coverity.ymlworkflows/docer_publish.yml addon 目录doxmlparser 目录doxyap…

金币商城功能迭代. 使用版本号乐观锁解决数据的并发修改问题

前言. 公司的商城模块嵌在微信公众号里面, 商城里面除了少量的现金业务, 大头在金币业务里面, 商城本来就是用来增加客户粘度的, 金币是客户通过某些行为免费获得如注册, 绑定,推荐等 需求. 金币方面之前的设计: 1.金币只有一个流水表,消费为负,获取为正 2.并且…

常用的表格检测识别方法 - 表格区域检测方法(下)

——书接上文 Training 半监督网络的训练分两步进行&#xff1a;a)对标记数据独立训练学生模块&#xff0c;由教师模块生成伪标签&#xff1b;b)结合两个模块的训练&#xff0c;得到最终的预测结果。 伪标签框架 实验 数据集&#xff1a; TableBank是文档分析领域中用于表识别…

Beats:如何在 Docker 容器中运行 Filebeat

今天在这篇博客中&#xff0c;我们将学习如何在容器环境中运行 Filebeat。 为了快速了解 Filebeat 是做什么用的&#xff1a; Filebeat用于转发和集中日志数据它重量轻&#xff0c;小型化&#xff0c;使用的资源更少它作为代理安装在你的服务器上它监视来自指定位置的日志文件…