Spring Boot入門系列(二十二)使用Swagger2構(gòu)建RESTful API文檔
前面介紹了如何Spring Boot 快速打造Restful API 接口,也介紹了如何優(yōu)雅的實現(xiàn) Api 版本控制。
在實際項目中,Api 接口系統(tǒng)對接過程中,Api 接口文檔是非常重要的文檔。一般是設(shè)計完成之后,同時編寫Api 接口文檔,然后將接口文檔發(fā)給相關(guān)人員,于是大家就按照該文檔開發(fā)、集成并最終上線。但是,這是一種非常理想的狀態(tài),實際開發(fā)中,接口不斷變化,接口文檔也必須保持更新,這是一個非常麻煩的過程!為了解決這些問題,Swagger2 應(yīng)運而生。接下來,就和大伙聊一聊 Spring Boot 如何整合Swagger2,使用Swagger2構(gòu)建 RESTful API文檔。

一、什么是Swagger
Swagger 是一個規(guī)范和完整的框架,用于生成、描述、調(diào)用和可視化 RESTful 風(fēng)格的 Web 服務(wù)。是世界上最流行的 API 表達工具 。我們知道,RESTful API 可能要面對多個開發(fā)人員或多個開發(fā)團隊:IOS開發(fā)、Android開發(fā)或是Web前端開發(fā)等。為了減少與其他團隊平時開發(fā)期間的頻繁溝通成本,一般我們會創(chuàng)建一份API文檔來記錄所有接口細節(jié),但是api 接口文檔存在以下問題:
于接口眾多,并且細節(jié)復(fù)雜(需要考慮不同的HTTP請求類型、HTTP頭部信息、HTTP請求內(nèi)容等),要創(chuàng)建這樣一份高質(zhì)量的文檔本身就是件非常吃力的事。
隨著需求的不斷變化,接口文檔也必須同步修改,這很容易導(dǎo)致文檔和業(yè)務(wù)不一致情況出現(xiàn)。
為了解決這些問題,Swagger2 應(yīng)運而生。它可以輕松的整合到Spring Boot 中,自動生成強大的 RESTful API文檔。這樣既可以減少我們創(chuàng)建文檔的工作量,同時說明內(nèi)容又整合入實現(xiàn)代碼中,讓維護文檔和修改代碼整合為一體,可以讓我們在修改代碼邏輯的同時方便的修改文檔說明。另外Swagger2也提供了完整的測試頁面,來調(diào)試每個API 接口。
下面就以SpringBoot中集成Swagger為例做介紹說明Swagger2 的功能和作用。
二、Spring Boot 實現(xiàn)Swagger 2
Spring Boot 集成 Swagger 2很簡單,首先新建一個 SpringBoot 項目,這里就不重新創(chuàng)建項目,直接使用之前的rest 測試項目。然后引入依賴并做基礎(chǔ)配置即可:
1、配置Swagger2的依賴
在pom.xml 配置文件中,增加Swagger 2 的相關(guān)依賴,具體如下:
<!-- swagger2 依賴配置--><dependency><groupId>io.springfox</groupId><artifactId>springfox-swagger2</artifactId><version>2.8.0</version></dependency><dependency><groupId>io.springfox</groupId><artifactId>springfox-swagger-ui</artifactId><version>2.8.0</version></dependency>
注意,swagger 2 的版本號和 spring boot的版本號有些不匹配,最開始用2.2的版本和spring boot 的版本還不匹配,后來把 swagger 2 換成了2.8。
2、創(chuàng)建Swagger 2配置類
在com.weiz.config 包中,增加Swagger 2 的配置類,SwaggerConfig 類,具體代碼如下:
package com.weiz.config;import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Configuration;import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;import springfox.documentation.builders.ApiInfoBuilder;import springfox.documentation.builders.PathSelectors;import springfox.documentation.builders.RequestHandlerSelectors;import springfox.documentation.service.ApiInfo;import springfox.documentation.spi.DocumentationType;import springfox.documentation.spring.web.plugins.Docket;import springfox.documentation.swagger2.annotations.EnableSwagger2;2public class Swagger2Config implements WebMvcConfigurer {public Docket createRestApi() {return new Docket(DocumentationType.SWAGGER_2).apiInfo(apiInfo()).select().apis(RequestHandlerSelectors.basePackage("com.weiz.controller")).paths(PathSelectors.any()).build();}private ApiInfo apiInfo() {return new ApiInfoBuilder().title("Spring Boot中使用Swagger2構(gòu)建RESTful APIs").description("Spring Boot相關(guān)文章請關(guān)注:https://www.cnblogs.com/zhangweizhong").termsOfServiceUrl("https://www.cnblogs.com/zhangweizhong").contact("架構(gòu)師精進").version("1.0").build();}/*** swagger增加url映射* @param registry*/public void addResourceHandlers(ResourceHandlerRegistry registry) {registry.addResourceHandler("swagger-ui.html").addResourceLocations("classpath:/META-INF/resources/");registry.addResourceHandler("/webjars/**").addResourceLocations("classpath:/META-INF/resources/webjars/");}}
說明:@Configuration 注解讓Spring boot來加載該類配置,@EnableSwagger2注解啟用Swagger 2,通過配置一個Docket Bean,配置映射路徑和要掃描的接口的位置。apiInfo,主要配置一下Swagger2文檔網(wǎng)站的信息,例如網(wǎng)站的title、網(wǎng)站的描述、使用的協(xié)議等等。
注意:
basePackage 可以在SwaggerConfig 里面配置 com.weiz.controller,也可以在啟動器里面 ComponentScan 配置。
需要在swaggerconfig 中配置swagger 的url 映射。
3、添加文檔說明內(nèi)容
上面配置完成之后,接下來需要在api 接口上增加內(nèi)容說明。這里方便起見,就直接在之前的UserController 中,增加相應(yīng)的接口內(nèi)容說明,代碼如下所示:
package com.weiz.controller;import com.weiz.pojo.SysUser;import com.weiz.service.UserService;import com.weiz.utils.JSONResult;import io.swagger.annotations.Api;import io.swagger.annotations.ApiOperation;import org.n3r.idworker.Sid;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.web.bind.annotation.*;public class UserController {private UserService userService;private Sid sid;public JSONResult create( SysUser user) throws Exception {String userId = sid.nextShort();user.setId(userId);userService.saveUser(user);return JSONResult.ok("保存成功");}public JSONResult update( SysUser user) {userService.updateUser(user);return JSONResult.ok("保存成功");}public JSONResult delete( String userId) {userService.deleteUser(userId);return JSONResult.ok("刪除成功");}public JSONResult queryUserById( String userId) {return JSONResult.ok(userService.queryUserById(userId));}}
說明:
1、@Api注解,用來給整個controller 增加說明。
2、@ApiOperation注解,用來給各個API 方法增加說明。
3、@ApiImplicitParams、@ApiImplicitParam注解,用來給參數(shù)增加說明。
4、Swagger 還有用于對象參數(shù)的注解,對象參數(shù)的描述也可以放在實體類中。這里不細說,大家可以自行研究。
三、驗證測試
完成上面的配置和代碼修改之后,Swagger 2 就集成到Spring boot 項目中了,接下來啟動Spring Boot程序,訪問:http://localhost:8088/swagger-ui.html

最后
以上,就把Spring Boot 如何整合Swagger2,使用Swagger2構(gòu)建 RESTful API文檔 介紹完了。實現(xiàn)還是比較簡單的,但是還是需要理解里面的相關(guān)注解的用法。
這個系列課程的完整源碼,也會提供給大家。大家私信我(章為忠學(xué)架構(gòu)),回復(fù):springboot源碼。獲取這個系列課程的完整源碼。
推薦閱讀:
SpringBoot入門系列(三十一) 實現(xiàn)靜態(tài)文件、配置文件與jar分離
SpringBoot入門系列(三十)Spring Boot項目打包、發(fā)布與部署
SpringBoot入門系列(二十九)如何使用JdbcTemplate操作數(shù)據(jù)庫?
SpringBoot入門系列(二十八)使用Redis實現(xiàn)分布式Session共享
Spring Boot入門系列(二十一) 如何優(yōu)雅的設(shè)計Rest API版本號,實現(xiàn)API版本控制
Spring Boot入門系列(十九)集成mybatis,使用注解實現(xiàn)動態(tài)Sql、參數(shù)傳遞等常用操作!
Spring Boot入門系列(十八)mybatis 使用注解實現(xiàn)增刪改查,無需xml文件
Spring Boot入門系列(十七)Mybatis創(chuàng)建自定義mapper 實現(xiàn)多表關(guān)聯(lián)查詢!
Spring Boot入門系列(十六)整合pagehelper,一秒實現(xiàn)分頁功能!
Spring Boot入門系列(十五) SpringBoot開發(fā)環(huán)境熱部署的配置
Spring Boot入門系列(十三)統(tǒng)一日志處理!
Spring Boot入門系列(十一)如何整合Mybatis,實現(xiàn)增刪改查【XML 配置版】
Spring Boot入門系列(十)如何使用攔截器,一學(xué)就會!
SpringBoot入門系列(三)SpringBoot資源文件屬性配置
SpringBoot入門系列(二)Controller介紹及如何返回json數(shù)據(jù)
SpringBoot入門系列(一)如何快速創(chuàng)建SpringBoot項

