前言
什么是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 {
}
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
首先得说一下它的官方文档链接,不过它都是英文不好懂,大家可跟着我的步骤去构建
本次项目使用的是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文件
更新于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注解,名称自取
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
文件,任意取名
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
引入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界面,但是一般情况它可能用来写自己个人网址还是什么比较多吧,也可以和我一样的写法。
然后美化后的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文档的配置和使用步骤,如有新内容将在本文章更新