Swagger


前言

現在很多項目都開始使用前后端分離的架構方式了,前后端分離帶來諸多好處的同時,也面臨了一些問題,比如前后端開發人員的協同問題。

之前一般是通過文檔的形式來定義接口,然后前后端開發人員根據接口去各自開發,但是測試的時候往往會發現有對應不上的情況!

前端添加一個字段,后端則可能修改一系列的方法,這種情況帶來了很大的麻煩,因此Swagger應運而生!

目錄

Swagger 概念

Swagger 使用場景

Swagger 配置-文檔信息

Swagger 配置-接口掃描/過濾

Swagger 配置-分組

Swagger 配置-API注解

 

使用 Swagger測試接口

Swagger 概念

Swagger主要應用於前后端分離項目的協同開發,通過簡單易用的配置,即可實現接口信息文檔的實時更新,使得開發更見高效和便捷!

Swagger 使用場景

從開發的角度,這是對於前后端分離而且前后端人員分離的情況的!

如果是前后端分離,但是前后端人員不分離、甚至就是一個人承包了前后端,那實屬沒必要了~~~

從項目周期的角度,Swagger 在開發和測試時使用,上線則需要關閉。

Swagger 配置

1. 添加依賴包:swagger2、swagger-ui

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

 添加配置類,並開啟Swagger

package com.hwl.swgger01.config;

import org.springframework.context.annotation.Configuration;
import springfox.documentation.swagger2.annotations.EnableSwagger2;

@Configuration
@EnableSwagger2 //並開啟Swagger
public class SwaggerConfig {
}

 完成上門兩步已經能使用Swagger了,非常簡單。

測試訪問 http://localhost:8080/swagger-ui.html

Swagger提供的界面有四個信息模塊,如上圖。

配置Swagger

實際開發中,我們一般不使用默認的配置,而是根據需要進行自定義自己的配置

Swagger的配置主要使用Docket這個實例提供的接口進行配置,從而實輕松現來接管默認配置。

 

 注入配置實例,並修改Swagger信息

 
         
package com.hwl.swgger01.config;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
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;

import java.util.ArrayList;

@Configuration
@EnableSwagger2
public class SwaggerConfig {

//配置並注入swagger的Docket實例,接管默認的配置信息
@Bean
public Docket docket(){
return new Docket( DocumentationType.SWAGGER_2 ) //參數 DocumentationType:SWAGGER_12/SWAGGER_2/SPRING_WEB
.apiInfo( setApiInfo() );
}

//配置swagger的apiInfo,參考默認配置修改
private ApiInfo setApiInfo(){

Contact contact = new Contact( "工程師01","hello.com","yunnanhwl@163.com" );//作者信息
return new ApiInfo(
"我的標題你做主",
"swagger有點好用",
"1.0",
"urn:tos",
contact,
"Apache 2.0",
"http://www.apache.org/licenses/LICENSE-2.0",
new ArrayList());
}

} 

 運行查看修改結果:

 

 

自定義配置掃描接口

默認的配置是掃描出全部的接口的,例如springBoot默認的錯誤頁面的接口。有時候我們只希望掃描自己想要的接口,這種情況也是通過Docket對象來設置:

 //配置並注入swagger的Docket實例,接管默認的配置信息
    @Bean
    public Docket docket(){
        return new Docket( DocumentationType.SWAGGER_2 ) //參數 DocumentationType:SWAGGER_12/SWAGGER_2/SPRING_WEB
                .apiInfo( setApiInfo() )
                .select()
                .apis( RequestHandlerSelectors.basePackage("com.hwl.swgger01.controller") ) //配置掃描包
                .build();
    }

 

現在訪問只有我們指定包下面的接口了:

通過源碼發現這里的掃描策略有以下幾種

  • any //掃描全部
  • none //都不掃描
  • withMethodAnnotation //掃描方法上的注
  • withClassAnnotation //掃描類上的注解,參數,例子:RestController.calss就只會掃描這樣的類輸出api

以上我們是通過Docket對象的apis來設置掃描哪些包,但有時候我們需要的包下面有些類或接口又是不需要掃描的,這時候需要使用過濾:

.apis() //配置掃描哪些包
.paths()//配置哪些需要過濾

 

Swagger的內置開關

Swagger是開發提供了方便,但是一旦產品上線,測需要去掉Swagger,除了直接的代碼摘除,其實Swagger提供了接口用來直接關閉:

 .enable( flag ) //flag為false則關閉Swagger

 

一般會根據項目的環境來判斷是否開啟,當環境為開發、測試環境時開啟:

 

 分組協同開發

.groupName("Group01")

 

各組來實現自己的Docket配置,從而實現各組的實際對外顯示情況:

  //配置並注入swagger的Docket實例,接管默認的配置信息
    @Bean
    public Docket docket(){
        return new Docket( DocumentationType.SWAGGER_2 ) //參數 DocumentationType:SWAGGER_12/SWAGGER_2/SPRING_WEB
                .apiInfo( setApiInfo() )
                .groupName("Group01")
                .select()
                .apis( RequestHandlerSelectors.basePackage("com.hwl.swgger01.controller") ) //配置掃描哪些
                .build();
    }

    @Bean
    public Docket docket1(){
        return new Docket( DocumentationType.SWAGGER_2 )
                .apiInfo( setApiInfo() )
                .groupName("Group02");
    }

 

顯示如下:

 

實體類

在前后端分離協同開發中,除了需要溝通接口外,實體類也是很重要的。

使用Swagger后,只要掃描顯示的接口中,返回值帶有某個實體類,那么該實體類會自動被Swagger加入到module中顯示出來:

返回值:

 @RequestMapping("/getUser")
    public User hello(){
        return new User( "lihua","123456" );
    }

Swagger自動顯示相關的實體:

 

 此外,為了Swagger文檔的友好性,Swagger還提供了一些注解來對類、方法、字段等進行一個額外的注釋說明:

 

 如:

@ApiModel("用戶信息") 用來標注解釋實體類,訪問swagger時講看到注釋信息,提供了一定的友好度。

使用Swagger進行接口測試

swagger還直接提供了接口的測試功能,非常方便!

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM