SpringBoot如何使用Swagger2生成接口文檔

Swagger是什么?

Swagger是一個規(guī)范和完整的框架,用于生成、描述、調(diào)用和可視化 RESTful風格的Web服務(wù)??傮w目標是使客戶端和文件系統(tǒng)作為服務(wù)器以同樣的速度來更新。文件的方法,參數(shù)和模型緊密集成到服務(wù)器端的代碼,允許API來始終保持同步。
Swagger的作用主要有以下兩點:

  • 接口的文檔在線自動生成。
  • 功能測試。

在SpringBoot中使用Swagger2生成接口文檔

1.引入Swagger2相關(guān)依賴。

<dependency>
  <groupId>io.springfox</groupId>
  <artifactId>springfox-swagger2</artifactId>
  <version>2.2.2</version>
</dependency>

<dependency>
  <groupId>io.springfox</groupId>
  <artifactId>springfox-swagger-ui</artifactId>
  <version>2.2.2</version>
</dependency>

2.在Application.java的同級包路徑下創(chuàng)建Swagger2的配置類Swagger2。

package com.wunian.swagger;

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.spi.DocumentationType;
import springfox.documentation.spring.web.plugins.Docket;
import springfox.documentation.swagger2.annotations.EnableSwagger2;

/**
 * @author wunian
 * @desc Swagger配置類
 *
 * @createdate 2019/9/27
 */
@Configuration  //讓spring來加載該類配置
@EnableSwagger2 //啟用Swagger2
public class Swagger2 {

    /**
     * 創(chuàng)建API應(yīng)用
     * createApiInfo() 增加api相關(guān)信息
     * 通過select()函數(shù)返回一個ApiSelectorBuilder實例,用來控制哪些接口暴露給Swagger來展現(xiàn)
     * 采用指定掃描的包路徑來定義指定要建立API的目錄
     * @return
     */
    @Bean
    public Docket createRestApi(){
        return new Docket(DocumentationType.SWAGGER_2)
                .apiInfo(createApiInfo())
                .select()
                //暴露給Swagger的包路徑
                .apis(RequestHandlerSelectors.basePackage("com.wunian.swagger.controller"))
                .paths(PathSelectors.any())
                .build();
    }

    /**
     * 創(chuàng)建該API的基本信息
     * 訪問地址:http://localhost:8080/swagger-demo/swagger-ui.html
     * @return
     */
    protected ApiInfo createApiInfo(){
        return new ApiInfoBuilder()
                 //標題
                 .title("使用Swagger2來構(gòu)建SpringBoot Restful APIs")
                 //標題下方的小字
                 .description("詳情請關(guān)注https://swagger.io/resources/open-api/")
                 //組織服務(wù)地址
                 .termsOfServiceUrl("https://swagger.io/resources/open-api/")
                 //開發(fā)者
                 .contact("勿念")
                 //API版本
                 .version("0.1")
                 .build();
    }
}

3.創(chuàng)建HelloController,添加Api方法并使用Swagger注解來對文檔內(nèi)容進行相關(guān)說明。

package com.wunian.swagger.controller;

import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation;
import org.springframework.stereotype.Controller;
import org.springframework.util.StringUtils;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;

/**
 * @author wunian
 * @desc 測試Swagger注解的控制器
 * @createdate 2019/9/27
 */
@Controller
@RequestMapping("/hello")
//用在類上,說明該類的作用
@Api(value = "HelloController|一個用來測試swagger注解的控制器")
public class HelloController {

    @ResponseBody
    @RequestMapping(value = "/getUserName",method= RequestMethod.GET)
    //給方法增加說明,notes是補充的說明
    @ApiOperation(value = "根據(jù)用戶ID獲取用戶姓名",notes = "userId:1為超級管理員,其他為普通用戶")
    //給方法入?yún)⒃黾诱f明,name:參數(shù)名,value:說明參數(shù)的意思,dataType:參數(shù)類型,required:參數(shù)是否必須傳
    //paramType:指定參數(shù)放在哪個地方,
    //header:請求參數(shù)放置于Request Header,使用@RequestHeader獲取
    //query:請求參數(shù)放置于請求地址,使用@RequestParam獲取
    //path:(用于restful接口)-->請求參數(shù)的獲?。篅PathVariable
    //body:(不常用)
    //form(不常用)
    @ApiImplicitParam(paramType = "query",name = "userId",value = "用戶ID",dataType = "int")
    public String getUserName(@RequestParam Integer userId){
        if(userId==1){
            return "Admin";
        }else{
            return "普通用戶";
        }
    }

    @ResponseBody
    //Conntroller中定義的方法必須在@RequestMapper中顯示的指定RequestMethod類型,
    // 否則SawggerUi會默認為全類型皆可訪問, API列表中會生成多條項目。
    @RequestMapping("/updatePassword")
    @ApiOperation(value = "修改用戶密碼",notes = "根據(jù)用戶ID修改密碼")
    //用在方法上包含一組參數(shù)說明
    @ApiImplicitParams({
            //如果paramType與方法參數(shù)獲取使用的注解不一致,會直接影響到參數(shù)的接收。
        @ApiImplicitParam(paramType = "query",name = "userId",value = "用戶ID",required = true,dataType = "int"),
        @ApiImplicitParam(paramType = "query",name = "pwd",value = "舊密碼",required = true,dataType = "String"),
        @ApiImplicitParam(paramType = "query",name = "newPwd",value = "新密碼",required = true,dataType = "String")
    })

    public String updatePassword(@RequestParam(value = "userId")Integer userId,
                                 @RequestParam(value = "pwd")String pwd,
                                 @RequestParam(value = "newPwd")String newPwd){
        if(userId<0){
            return "該用戶不存在";
        }
        if(StringUtils.isEmpty(pwd)||StringUtils.isEmpty(newPwd)){
            return "密碼不能為空";
        }
        if(pwd.equals(newPwd)){
            return "新密碼不能和舊密碼相同";
        }
        return "密碼修改成功";
    }
}

4.在application.properties文件中配置一些基本參數(shù)。

#服務(wù)端口
server.port=8081
#服務(wù)訪問的上下文路徑
server.servlet.context-path=/
#swagger.json的訪問request mapping路徑
springfox.documentation.swagger.v2.path=/api-docs

5.啟動程序,在瀏覽器中訪問http://localhost:8081/swagger-ui.html,出現(xiàn)如下界面說明接口文檔生成成功。

swagger接口文檔

6.點擊方法列表可以看到該方法的詳細信息和進行功能調(diào)試。
詳細信息

功能測試

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容