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



初始项目结构如图

搭建完框架的项目截图

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代码
<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>
以上,我们基础的springboot项目就搭建好了,接下来正式的去实现swagger
首先得说一下它的官方文档链接,不过它都是英文不好懂,大家可跟着我的步骤去构建
本次项目使用的是swagger2
同时说一点: swagger分为swagger2 和swagger3两个常用版本。二者区别不是很大,主要对于依赖和注解进行了优化。swagger2需要引入2个jar包,swagger3只需要一个,用起来没有什么大的区别。下面以swagger2为例。
ps: 如果你需要使用的是swagger3或者更高版本
请在application.yml文件添加如下配置
spring:
mvc:
path match:
matching-strategy: ant_path_matcher
<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>
在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();
}
}
在这里分别使用了 @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;
}
这里使用了@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";
}
}
到这个地方,我们就可以访问我们的接口文档了
前面我的yml配置的访问地址是/swagger

更新于2023-01-15 09:12:49
因此swagger2访问的链接是:
http://localhost:9111/swagger/swagger-ui.html
假如你使用的是swagger3
那么按照本项目的配置访问链接为
http://localhost:9111/swagger/swagger-ui/index.html
运行后的项目截图为:


更新于2023-01-15 09:14:54
以上,你会发现,它的界面太丑了,看上去体验不是很好,那么我接下来,将变更它的UI
<dependency>
<groupId>com.github.xiaoymingroupId>
<artifactId>swagger-bootstrap-uiartifactId>
<version>1.9.6version>
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界面,但是一般情况它可能用来写自己个人网址还是什么比较多吧,也可以和我一样的写法。

然后美化后的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/");
}
}
以上就是swagger文档的配置和使用步骤,如有新内容将在本文章更新