<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          Spring Boot入門系列(二十二)使用Swagger2構(gòu)建RESTful API文檔

          共 6548字,需瀏覽 14分鐘

           ·

          2021-09-18 22:21

          前面介紹了如何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;
          @Configuration@EnableSwagger2public class Swagger2Config implements WebMvcConfigurer { @Bean 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 */ @Override 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.*;
          @Api(tags = {"用戶接口"})@RestController@RequestMapping("/")public class UserController {
          @Autowired private UserService userService;
          @Autowired private Sid sid;
          @ApiOperation(value="創(chuàng)建用戶", notes="根據(jù)User對象創(chuàng)建用戶") @PostMapping(value = "user") public JSONResult create(@RequestBody SysUser user) throws Exception { String userId = sid.nextShort(); user.setId(userId); userService.saveUser(user); return JSONResult.ok("保存成功"); }
          @ApiOperation(value="更新用戶詳細信息", notes="根據(jù)id來指定更新對象,并根據(jù)傳過來的user信息來更新用戶詳細信息") @PutMapping(value = "user") public JSONResult update(@RequestBody SysUser user) { userService.updateUser(user); return JSONResult.ok("保存成功"); }
          @ApiOperation(value="刪除用戶", notes="根據(jù)url的id來指定刪除對象") @DeleteMapping("user/{userId}") public JSONResult delete(@PathVariable String userId) { userService.deleteUser(userId); return JSONResult.ok("刪除成功"); }
          @ApiOperation(value="查詢用戶",notes = "通過用戶ID獲取用戶信息") @GetMapping("user/{userId}") public JSONResult queryUserById(@PathVariable 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源碼。獲取這個系列課程的完整源碼。


          推薦閱讀:




          瀏覽 39
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  日本黄色视频免费看 | 亚洲新人天堂中文 | 中文无码视频直接看 | 最黄色视频久久 | 另类网站 |