首页 > 其他分享 >公司已有springboot项目引入swagger

公司已有springboot项目引入swagger

时间:2023-06-13 15:01:14浏览次数:43  
标签:springfox springboot springframework RELEASE context import 引入 org swagger


公司已有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>

公司已有springboot项目引入swagger_spring boot

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.SWAGGER_2)
                .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 改成自己项目的路径

公司已有springboot项目引入swagger_jar_02

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 里的注解给注释掉,再重启应用,发现能正常运行

公司已有springboot项目引入swagger_spring_03

4.3.1 尝试方案一 没成功

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

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

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

@EnableSwagger2
@EnableWebMvc

公司已有springboot项目引入swagger_jar_04

我这里的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>

4.4 注意

4.4.1 @Api注解中的 description 标签不能用了,改用 tags,
idea会直接给一个删除字符的提示
description = "原先的描述不管用了?"
tags = "测试文档效果显示"

公司已有springboot项目引入swagger_java_05

4.4.2 @ApiModelProperty不生效

实体类的文档内容不显示

公司已有springboot项目引入swagger_java_06

查询资料一般是字段首字母大写导致的,但这里明显不是

把配置里的 SPRING_WEB 替换成 SWAGGER_2 类型,再次重启,就能显示成功了

公司已有springboot项目引入swagger_java_07

公司已有springboot项目引入swagger_spring_08


标签:springfox,springboot,springframework,RELEASE,context,import,引入,org,swagger
From: https://blog.51cto.com/u_16159391/6470228

相关文章

  • 搭建springbootweb环境
    搭建springboot环境(idea环境)实现步骤:1.基础环境配置2.maven配置3.编写第一个程序helloworld(可能有两个小问题)4.运行(jar包运行,命令行运行)一.基础环境配置进入idea,点击file->new->project,在弹出的页面上,选择springinitiallzr并进行相关的配置点击next点击create,完成sp......
  • springboot 测试用例 gradle
    在springboot2.4.5之后的变成了jinut5直接引用即可不需要排除org.junit.jupiter.api.Testorg.springframework.boot:spring-boot-starter-test测试数据H2packagecom.example.test_pro_gradle;importorg.junit.jupiter.api.Test;importorg.slf4j.Logger;impor......
  • 跨越式初学SpringBoot的各种问题《一》
    前提:本人没有学过一点SSM,在学SpringBoot之前,上网搜索了各种回答,关于能否跨越直接学SpringBoot,得到的都是肯定回答可以;在本人觉得promising,开始在哔哩哔哩大学,翻找各种SpringBoot叫教学视频,每一个教程打开第一集就是,要求懂SSM(谁懂啊bleak)。然而,我依然坚定开始了零SSM基础的学习!应......
  • SpringBoot环境扩展机制
    前言SpringBoot在启动时,会先创建Environment实例,然后再创建ApplicationContext上下文。在创建Environment时,提供了扩展机制给用户对Environment实例进行修改,如SpringBoot默认使用的application.yml属性配置文件。如何使用该机制编写类实现EnvironmentPostProcessor接口。在......
  • Springboot读取不到yml文件的问题(转载)
    Springboot工程分为两个大文件夹,/src/main和/src/test,main和test下面分别由java和resource,如图所示: 规则:main的java里面的代码,只能读取main的resource的配置文件;test的java里面的代码,既可以读取main的resource的配置文件,也可以读取test的resource的配置文件。test......
  • 随笔(十八)『SpringBoot 整合 Swagger2』
    1、添加Swagger2依赖<!--swagger2--><dependency><groupId>io.springfox</groupId><artifactId>springfox-swagger2</artifactId><version>2.9.2</version>......
  • gradle 构建springboot 项目两种方式
    第一种直接用插件spring-boot-gradle-plugin无需写入版本buildscript{repositories{maven{url'https://maven.aliyun.com/repository/public'}}dependencies{classpath'org.springframework.boot:spring-boot-gradle-plugin......
  • springboot日期格式化,时差问题
    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档文章目录前言一、mysql中日期字段的正确设置二、日期格式化,时差1.日期字段返回格式不正确--方案一2.日期字段返回格式不正确--方案二二、日期无法自动填充1.mybatis-plus2.mybatis只能靠自己了总结前言随着mysql8......
  • 自定义SpringBoot的starter
    1.自定义starter名为my-starter-spring-boot-starter1.1idea中创建一个maven模块groupId为com.exampleartifactId为my-starter-spring-boot-starter起名规范:1.官方starter是spring-boot-starter-xxxx2.自定义starter是xxx-spring-boot-starter依赖如下<?xmlversion="1.0......
  • SpringBoot多模块项目搭建以及搭建基础模板
    多模块项目搭建目录多模块项目搭建1.父项目pom文件编辑2.创建子模块1.父项目pom文件编辑<!--1.父工程添加pom格式--><packaging>pom</packaging><!--定义子模块--><modules><module>walker-service</module><module>walker-utils&......