前言

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

创建springboot项目

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

FILE—>NEW—>PROJECT创建项目

spring boot 项目 log4j spring boot 项目生成接口文档_spring boot

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

spring boot 项目 log4j spring boot 项目生成接口文档_mybatis_02


spring boot 项目 log4j spring boot 项目生成接口文档_java_03


初始项目结构如图

spring boot 项目 log4j spring boot 项目生成接口文档_spring_04

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

搭建完框架的项目截图

spring boot 项目 log4j spring boot 项目生成接口文档_spring_05

testMapper代码

package com.testSwagger.mapper;
import org.apache.ibatis.annotations.Mapper;
@Mapper
public interface testMapper {
}

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);
    }
}

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: 连接数据库的密码

pom.xml代码

<?xml version="1.0" encoding="UTF-8"?>
<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.0</modelVersion>

    <groupId>org.example</groupId>
    <artifactId>swagger</artifactId>
    <version>1.0-SNAPSHOT</version>

    <properties>
        <maven.compiler.source>8</maven.compiler.source>
        <maven.compiler.target>8</maven.compiler.target>
        <!--    编码格式-->
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
    </properties>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.4.5</version>
    </parent>
    <dependencies>
        <!--        springboot-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <!--        mybatis-->
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-boot-starter</artifactId>
            <version>3.4.3</version>
        </dependency>
        <!--        mysql-->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>8.0.26</version>
        </dependency>
<!--        lombok-->
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.16.18</version>
            <optional>true</optional>
        </dependency>
    </dependencies>
    <!--    打包配置-->
    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>
</project>

以上,我们基础的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

添加swagger的pom依赖

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

添加config配置

config文件夹下,创建swagger配置的java文件

spring boot 项目 log4j spring boot 项目生成接口文档_spring_06


更新于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();
    }
}

创建swagger文档案例

新建实体类并添加swagger注解

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

添加实体类的swagger注解,名称自取

spring boot 项目 log4j spring boot 项目生成接口文档_java_07

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

创建controller并添加swagger注解

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

新建一个controller文件,任意取名

spring boot 项目 log4j spring boot 项目生成接口文档_mybatis_08

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";
    }
}

访问接口文档

到这个地方,我们就可以访问我们的接口文档了

前面我的yml配置的访问地址是/swagger

spring boot 项目 log4j spring boot 项目生成接口文档_java_09

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

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

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

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

运行后的项目截图为:

spring boot 项目 log4j spring boot 项目生成接口文档_spring_10


spring boot 项目 log4j spring boot 项目生成接口文档_mybatis_11


更新于2023-01-15 09:14:54

进阶

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

引入swagger的UI依赖

<dependency>
    <groupId>com.github.xiaoymin</groupId>
    <artifactId>swagger-bootstrap-ui</artifactId>
    <version>1.9.6</version>
</dependency>

然后你直接访问链接
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();
    }

点击swagger基础界面的

Terms of service也可以跳转到美化后的Swagger的UI界面

虽然当前配置下可以点击

相与还-Website进行跳转到美化后的Swagger的UI界面,但是一般情况它可能用来写自己个人网址还是什么比较多吧,也可以和我一样的写法。

spring boot 项目 log4j spring boot 项目生成接口文档_spring boot_12


然后美化后的UI截图如下:

spring boot 项目 log4j spring boot 项目生成接口文档_java_13


spring boot 项目 log4j spring boot 项目生成接口文档_spring_14

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

问题处理

假如出现访问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/");
    }
}

结语

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