• 教你springboot配置swagger实现接口文档


    前言

    什么是Swagger?
    在正式要配置它之前我们应该要对它有所了解,所谓swagger,简单说就是专门配置接口文档说明的一个依赖工具。
    swagger是当下比较流行的实时接口文文档生成工具。接口文档是当前前后端分离项目中必不可少的工具,在前后端开发之前,后端要先出接口文档,前端根据接口文档来进行项目的开发,双方开发结束后在进行联调测试。
    以上也就是它的作用,别的就不多说了,需要了解更多就自己去百度查找资料,最重要的还是如何去配置和使用它

    创建springboot项目

    那么,我们一开始应该要有一个springboot项目,本次我会从零开始构建。
    本次使用的是IDEA进行创建springboot项目

    FILE—>NEW—>PROJECT创建项目

    在这里插入图片描述

    选择Maven类型,并下一步输入项目名、组织名然后点击FINISH创建

    在这里插入图片描述
    在这里插入图片描述
    初始项目结构如图
    在这里插入图片描述

    创建不同层级文件夹并搭建框架

    搭建完框架的项目截图
    在这里插入图片描述

    testMapper代码

    package com.testSwagger.mapper;
    import org.apache.ibatis.annotations.Mapper;
    @Mapper
    public interface testMapper {
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5

    SwaggerApplication代码

    package com.testSwagger;
    import org.mybatis.spring.annotation.MapperScan;
    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    // 声明springboot
    @SpringBootApplication
    // 指定连接数据库的mapper区
    @MapperScan("com.testSwagger.mapper")
    public class SwaggerApplication {
        public static void main(String[] args) {
            SpringApplication.run(SwaggerApplication.class,args);
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    application.yml代码

    # 指定启动路径
    server:
      port: 9111
      servlet:
        # 项目的路径,配置如下之后,它的路径为http:locahost:9111/swagger
        context-path: /swagger
    # 为启动项目,需要配置一个数据库进行连接
    spring:
      datasource:
        driver-class-name: com.mysql.jdbc.Driver
        url: jdbc:mysql://数据库url
        username: 连接数据库的用户名
        password: 连接数据库的密码
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    pom.xml代码

    
    <project xmlns="http://maven.apache.org/POM/4.0.0"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
        <modelVersion>4.0.0modelVersion>
    
        <groupId>org.examplegroupId>
        <artifactId>swaggerartifactId>
        <version>1.0-SNAPSHOTversion>
    
        <properties>
            <maven.compiler.source>8maven.compiler.source>
            <maven.compiler.target>8maven.compiler.target>
            
            <project.build.sourceEncoding>UTF-8project.build.sourceEncoding>
            <project.reporting.outputEncoding>UTF-8project.reporting.outputEncoding>
        properties>
        <parent>
            <groupId>org.springframework.bootgroupId>
            <artifactId>spring-boot-starter-parentartifactId>
            <version>2.4.5version>
        parent>
        <dependencies>
            
            <dependency>
                <groupId>org.springframework.bootgroupId>
                <artifactId>spring-boot-starter-webartifactId>
            dependency>
            <dependency>
                <groupId>org.springframework.bootgroupId>
                <artifactId>spring-boot-starterartifactId>
            dependency>
            <dependency>
                <groupId>org.springframework.bootgroupId>
                <artifactId>spring-boot-starter-testartifactId>
                <scope>testscope>
            dependency>
            
            <dependency>
                <groupId>com.baomidougroupId>
                <artifactId>mybatis-plus-boot-starterartifactId>
                <version>3.4.3version>
            dependency>
            
            <dependency>
                <groupId>mysqlgroupId>
                <artifactId>mysql-connector-javaartifactId>
                <version>8.0.26version>
            dependency>
    
            <dependency>
                <groupId>org.projectlombokgroupId>
                <artifactId>lombokartifactId>
                <version>1.16.18version>
                <optional>trueoptional>
            dependency>
        dependencies>
        
        <build>
            <plugins>
                <plugin>
                    <groupId>org.springframework.bootgroupId>
                    <artifactId>spring-boot-maven-pluginartifactId>
                plugin>
            plugins>
        build>
    project>
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68

    以上,我们基础的springboot项目就搭建好了,接下来正式的去实现swagger

    配置swagger

    首先得说一下它的官方文档链接,不过它都是英文不好懂,大家可跟着我的步骤去构建

    swagger文档链接

    本次项目使用的是swagger2
    同时说一点: swagger分为swagger2 和swagger3两个常用版本。二者区别不是很大,主要对于依赖和注解进行了优化。swagger2需要引入2个jar包,swagger3只需要一个,用起来没有什么大的区别。下面以swagger2为例。

    ps: 如果你需要使用的是swagger3或者更高版本
    请在application.yml文件添加如下配置

    spring:
        mvc:
            path match:
                matching-strategy: ant_path_matcher
    
    • 1
    • 2
    • 3
    • 4

    添加swagger的pom依赖

            <dependency>
                <groupId>io.springfoxgroupId>
                <artifactId>springfox-swagger2artifactId>
                <version>2.9.2version>
            dependency>
            <dependency>
                <groupId>io.springfoxgroupId>
                <artifactId>springfox-swagger-uiartifactId>
                <version>2.9.2version>
            dependency>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    添加config配置

    config文件夹下,创建swagger配置的java文件
    在这里插入图片描述
    更新于2023-01-15 09:11:35

    package com.testSwagger.config;
    
    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.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;
    
    
    @Configuration
    @EnableSwagger2
    public class SwaggerConfiguration {
        @Bean
        public Docket createRestApi() {
            return new Docket(DocumentationType.SWAGGER_2)
                    .pathMapping("/")
                    .enable(true)
                    .host("localhost:9111")
                    .select()
                    //这里指定Controller扫描包路径(项目路径也行)
                    .apis(RequestHandlerSelectors.basePackage("com.testSwagger.controller"))
                    .paths(PathSelectors.any())
                    .build()
                    .apiInfo(apiInfo());
        }
    
        private ApiInfo apiInfo() {
            return new ApiInfoBuilder()
                    .title("swagger测试文档")
                    .description("swagger测试的API文档-swageer2")
                    .contact(new Contact("相与还","http://localhost:9111/swagger/doc.html","a1947934569@163.com"))
                    .termsOfServiceUrl("http://localhost:9111/swagger/doc.html")
                    .version("1.0.0")
                    .build();
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41

    创建swagger文档案例

    新建实体类并添加swagger注解

    在这里分别使用了 @ApiModel注解和 @ApiModelProperty 注解定义了实体的名称和字段的名称,方便生成接口文档时展示。

    添加实体类的swagger注解,名称自取
    在这里插入图片描述

    package com.testSwagger.bean;
    import io.swagger.annotations.ApiModel;
    import io.swagger.annotations.ApiModelProperty;
    import lombok.Data;
    
    @Data
    @ApiModel("swagger实体类")
    public class BeanTest {
        @ApiModelProperty("名称")
        private String name;
        @ApiModelProperty("年龄")
        private String age;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    创建controller并添加swagger注解

    这里使用了@Api注解和@ApiOperation注解分别标注了接口组名和接口的名称。

    新建一个controller文件,任意取名
    在这里插入图片描述

    package com.testSwagger.controller;
    import io.swagger.annotations.Api;
    import io.swagger.annotations.ApiOperation;
    import org.springframework.web.bind.annotation.GetMapping;
    import org.springframework.web.bind.annotation.PostMapping;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RestController;
    
    @RestController
    @RequestMapping("/swagger")
    @Api(value = "测试controller",tags = {"接口"})
    public class SwaggerController {
    
        @ApiOperation("接口1作用")
        @GetMapping("controller1")
        public String controller1() {
            return "测试接口1";
        }
    
        @ApiOperation("接口2作用")
        @PostMapping("controller2")
        public String controller2(){
            return "测试接口2";
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25

    访问接口文档

    到这个地方,我们就可以访问我们的接口文档了
    前面我的yml配置的访问地址是/swagger
    在这里插入图片描述

    更新于2023-01-15 09:12:49
    因此swagger2访问的链接是:

    http://localhost:9111/swagger/swagger-ui.html
    
    • 1

    假如你使用的是swagger3
    那么按照本项目的配置访问链接为

    http://localhost:9111/swagger/swagger-ui/index.html
    
    • 1

    运行后的项目截图为:
    在这里插入图片描述
    在这里插入图片描述
    更新于2023-01-15 09:14:54

    进阶

    以上,你会发现,它的界面太丑了,看上去体验不是很好,那么我接下来,将变更它的UI

    引入swagger的UI依赖

    <dependency>
        <groupId>com.github.xiaoymingroupId>
        <artifactId>swagger-bootstrap-uiartifactId>
        <version>1.9.6version>
    dependency>
    
    • 1
    • 2
    • 3
    • 4
    • 5

    然后你直接访问链接
    http://localhost:9111/swagger/doc.html

    也可以按照代码

        private ApiInfo apiInfo() {
            return new ApiInfoBuilder()
                    .title("swagger测试文档")
                    .description("swagger测试的API文档-swageer2")
                    .contact(new Contact("相与还","http://localhost:9111/swagger/doc.html","a1947934569@163.com"))
                    .termsOfServiceUrl("http://localhost:9111/swagger/doc.html")
                    .version("1.0.0")
                    .build();
        }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    点击swagger基础界面的
    Terms of service也可以跳转到美化后的Swagger的UI界面
    虽然当前配置下可以点击
    相与还-Website进行跳转到美化后的Swagger的UI界面,但是一般情况它可能用来写自己个人网址还是什么比较多吧,也可以和我一样的写法。
    在这里插入图片描述
    然后美化后的UI截图如下:
    在这里插入图片描述
    在这里插入图片描述

    明显比之前的好看很多,到现在已经可以进行开发完成接口文档了。

    问题处理

    假如出现访问swagger接口文档失败,报错404,则新建一个配置文件,配置文件名称任意,继承自WebMvcConfigurer
    代码例子:

    public class exampleConfig implements WebMvcConfigurer {
    	    /**
         * 防止/swagger-ui.html 404错误
         *
         * @param registry
         */
        @Override
        public void addResourceHandlers(ResourceHandlerRegistry registry) {
            registry.addResourceHandler("/**").addResourceLocations("classpath:/static/");
            registry.addResourceHandler("swagger-ui.html")
                    .addResourceLocations("classpath:/META-INF/resources/");
            // 开放优化后的swagger的ui访问路径
            registry.addResourceHandler("doc.html").addResourceLocations("classpath:/META-INF/resources/");
            registry.addResourceHandler("/webjars/**")
                    .addResourceLocations("classpath:/META-INF/resources/webjars/");
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17

    结语

    以上就是swagger文档的配置和使用步骤,如有新内容将在本文章更新

  • 相关阅读:
    【JAVA程序设计】(C00089)基于SSM(非maven)的仓库出入库管理系统
    iOS16 第4个测试版发布,带来6个新改动,还修复了上百个bug
    阿里云OSS前端直传+net core后端签名
    SQL高级用法
    金仓数据库 KingbaseES PL/SQL 过程语言参考手册(20. E PL/SQL 预定义类型)
    2023 届校招薪资爆料汇总
    部署一套单Master的K8s集群(kubeadm-V1.20)
    新型基础测绘与实景三维中国建设技术文件【3】基础地理实体空间身份编码规则
    基于AvaSpe 2048测定物体的光谱曲线
    操作系统与进程调度
  • 原文地址:https://blog.csdn.net/xc9711/article/details/126893012