springBoot詳解集成Swagger流程
目標(biāo):
- 了解Swagger的作用和概念
- 了解前后端分離
- 在springBoot中集成Swagger
Swagger簡介
前后端分離
VUE+springBoot
- 后端 :后端控制層、服務(wù)層、數(shù)據(jù)訪問層
- 前端 :前端控制層、視圖層
- 前后端通過API進行交互
- 前后端相對獨立,松耦合
- 可以部署在不同的服務(wù)器上
產(chǎn)生的問題
前后端集成,前端或者后端無法做到“及時協(xié)商,盡早解決”,最終導(dǎo)致問題集中爆發(fā)
解決方案
首先定義計劃的提綱,并實時跟蹤最新的API,降低集成風(fēng)險
Swagger
- 號稱世界上最流行的API框架
- Restful Api 文檔在線自動生成器 =>API 文檔 與API 定義同步更新
- 直接運行,可以在線測試API接口;
- 支持多種語言 (如:Java,PHP等)
- 官網(wǎng):https://swagger.io/
SpringBoot集成Swagger
新建一個springboot-web項目
下載maven依賴https://mvnrepository.com/search?q=springfox
<!-- https://mvnrepository.com/artifact/io.springfox/springfox-swagger2 -->
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger2</artifactId>
<version>2.9.2</version>
</dependency>
<!-- https://mvnrepository.com/artifact/io.springfox/springfox-swagger-ui -->
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger-ui</artifactId>
<version>2.9.2</version>
</dependency>
高版本是沒有第5部的測試頁面
3.0.0版本的要先在啟動類中加上注解@EnableOpenApi先在導(dǎo)入<groupId>io.springfox</groupId><artifactId>springfox-boot-starter</artifactId>
編寫Controller,測試運行成功
配置Swagger=》在包Config下
package com.hxl.config;
import org.springframework.context.annotation.Configuration;
import springfox.documentation.swagger2.annotations.EnableSwagger2;
@Configuration
@EnableSwagger2 //開啟swagger2
public class SwaggerConfig {
}
測試運行:http://localhost:8080/swagger-ui.html

配置Swagger
Swagger實例Bean是Docket,所以通過配置Docket實例來配置Swaggger。
//配置了Swagger的Docket實例
@Bean
public Docket docket(){
return new Docket(DocumentationType.SWAGGER_2);
}
再通過ApiInfo()屬性配置文檔信息
private ApiInfo apiInfo(){
//作者信息
Contact contact = new Contact("王木木","https://blog.csdn.net/qq_43585922?spm=1000.2115.3001.5343","11@qq.com");
return new ApiInfo(
"Swagger筆記", //標(biāo)題
"沖沖沖", //描述
"v1.0。0", //版本
"https://blog.csdn.net/qq_43585922?spm=1000.2115.3001.5343", //組織鏈接
contact, //聯(lián)系人信息
"Apach 2.0 許可", //許可
"許可鏈接", //許可連接
new ArrayList<>()//擴展
);
}
Docket關(guān)聯(lián)上ApiInfo
@Bean
public Docket docket(){
return new Docket(DocumentationType.SWAGGER_2).apiInfo(apiInfo());
}
啟動項目,訪問http://localhost:8080/swagger-ui.html

Swagger配置掃描接口
構(gòu)建Docket時通過select()方法配置怎么掃描接口。select()和build()是一套的
//配置了Swagger的Docket實例
@Bean
public Docket docket(){
return new Docket(DocumentationType.SWAGGER_2)
.apiInfo(apiInfo())
.select()
/*
RequestHandlerSelectors:要掃描接口的方式
basePackage:指定要掃描的包
any():掃描全部
none():不掃描
withClassAnnotation:掃描類上的注解,參數(shù)是一個注解的反射對象
withMethodAnnotation:掃描方法上的注解
path():過濾什么路徑
*/
.apis(RequestHandlerSelectors.basePackage("com.hxl.controller"))
//.paths(PathSelectors.ant("/hxl/**"))
.build();
}
我們看之前的運行結(jié)構(gòu)可以看到有base-error-controller和hello-controller,一旦使用了上述配置后,運行結(jié)果只有hello-controller
配置是否啟動Swagger
通過enable()方法配置是否啟用swagger
@Bean
public Docket docket(){
return new Docket(DocumentationType.SWAGGER_2)
.apiInfo(apiInfo())
//enable是否啟動Swagger,默認(rèn)為true,如果該位false則不能在瀏覽器中訪問
.enable(false)
.select()
/*
RequestHandlerSelectors:要掃描接口的方式
basePackage:指定要掃描的包
any():掃描全部
none():不掃描
withClassAnnotation:掃描類上的注解,參數(shù)是一個注解的反射對象
withMethodAnnotation:掃描方法上的注解
path():過濾什么路徑
*/
.apis(RequestHandlerSelectors.basePackage("com.hxl.controller"))
//.paths(PathSelectors.ant("/hxl/**"))
.build();
}
Swagger在生產(chǎn)環(huán)境中使用,在發(fā)布的時候不使用
- 判斷是否是生產(chǎn)環(huán)境
- 注入enable()值
當(dāng)我們有多個生產(chǎn)環(huán)境時。比如說application-dev.yaml和application-pro.yaml。動態(tài)設(shè)置當(dāng)前項目處于dev時顯示swagger,Pro是不顯示
#哪個環(huán)境生效
spring.profiles.active=dev
設(shè)置我們的dev走8081,默認(rèn)走8080,pro走8082
然后修改我們的配置
@Bean
public Docket docket(Environment environment){
//設(shè)置顯示的Swagger環(huán)境
Profiles profiles = Profiles.of("dev", "test");
//通過 判斷是否處在自己設(shè)定的環(huán)境中
boolean flag = environment.acceptsProfiles(profiles);
return new Docket(DocumentationType.SWAGGER_2)
.apiInfo(apiInfo())
//這里變成了flag
.enable(flag)
.select()
.apis(RequestHandlerSelectors.basePackage("com.hxl.controller"))
.build();
}
此時我們就發(fā)現(xiàn),如果我們走默認(rèn)的8080是沒有Swagger的,走8081才有
配置API文檔的分組
@Bean
public Docket docket(Environment environment){
return new Docket(DocumentationType.SWAGGER_2)
.apiInfo(apiInfo())
.groupName("王木木");
//其余配置省略
}
啟動項目就發(fā)現(xiàn)我們的組別有了

如果有多個分組怎么辦?只需要配置多個docket即可
//其他的環(huán)境需要自己填
@Bean
public Docket docket1(){
return new Docket(DocumentationType.SWAGGER_2).groupName("天");
}
@Bean
public Docket docket2(){
return new Docket(DocumentationType.SWAGGER_2).groupName("狼");
}
實體類配置
創(chuàng)建一個實體類
package com.hxl.pojo;
public class User {
public String username;
public String password;
}
只要這個實體在請求接口的返回值上,就可以映射到實體項中
//只要我們的接口中,返回值存在實體類,他就會掃描到Swagger中
@PostMapping("/user")
public User user(){
return new User();
}
測試

此時發(fā)現(xiàn)我們的Model中有了User。如果有中文的注釋,只需要在加兩個注解
package com.hxl.pojo;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
//@Api("注釋")
@ApiModel("用戶實體類")
public class User {
@ApiModelProperty("姓名")
public String username;
@ApiModelProperty("密碼")
public String password;
}
測試

常用的注解
Swagger的所有注解定義在io.swagger.annotations包下
| Swagger注解 | 簡單說明 |
|---|---|
| @Api(tags = “xxx模塊說明”) | 作用在模塊類上 |
| @ApiOperation(“xxx接口說明”) | 作用在接口方法上 |
| @ApiModel(“xxxPOJO說明”) | 作用在模型類上:如VO、BO |
| @ApiModelProperty(value = “xxx屬性說明”,hidden = true) | 作用在類方法和屬性上,hidden設(shè)置為true可以隱藏該屬性 |
| @ApiParam(“xxx參數(shù)說明”) | 作用在參數(shù)、方法和字段上 |
注解在類上的可以看一下上面的,接下來看注解在接口方法上,以及參數(shù)上
@ApiOperation("王木木的接口")
@PostMapping("/hxl")
public String hxl(@ApiParam("用戶名")String username){
return username;
}

在這里還可以進行測試

小結(jié)
- 我們可以通過Swagger給一些比較難理解的屬性或者接口增加注釋信息
- 接口文檔實時更新
- 可以在線測試
- 在正式發(fā)布的時候一定要關(guān)閉Swagger《安全;節(jié)省運行的內(nèi)存》
到此這篇關(guān)于springBoot詳解集成Swagger流程的文章就介紹到這了,更多相關(guān)springBoot Swagger內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Java實現(xiàn)數(shù)字金額轉(zhuǎn)化為英文金額功能
在處理財務(wù)數(shù)據(jù)時,有時需要將數(shù)字形式的金額轉(zhuǎn)換成英文描述的形式,比如在生成正式文件或發(fā)票時,本文將介紹如何使用Java實現(xiàn)這一功能,需要的朋友可以參考下2025-03-03
Spring實戰(zhàn)之使用TransactionProxyFactoryBean實現(xiàn)聲明式事務(wù)操作示例
這篇文章主要介紹了Spring實戰(zhàn)之使用TransactionProxyFactoryBean實現(xiàn)聲明式事務(wù)操作,結(jié)合實例形式分析了spring使用TransactionProxyFactoryBean實現(xiàn)聲明式事務(wù)相關(guān)配置、接口設(shè)置與使用技巧,需要的朋友可以參考下2020-01-01

