1. 程式人生 > >springboot專案整合swagger全過程

springboot專案整合swagger全過程

背景:
最近進行專案優化,增添swagger功能方便介面測試!

一、swagger簡介

Swagger 是一個規範和完整的框架,用於生成、描述、呼叫和視覺化 RESTful 風格的 Web 服務。總體目標是使客戶端和檔案系統作為伺服器以同樣的速度來更新。檔案的方法,引數和模型緊密整合到伺服器端的程式碼,允許API來始終保持同步。

作用:

  1. 介面的文件線上自動生成。
  2. 功能測試。

Swagger是一組開源專案,其中主要要專案如下:

Swagger-tools:提供各種與Swagger進行整合和互動的工具。例如模式檢驗、Swagger 1.2文件轉換成Swagger 2.0文件等功能。
Swagger-core

: 用於Java/Scala的的Swagger實現。與JAX-RS(Jersey、Resteasy、CXF…)、Servlets和Play框架進行整合。
Swagger-js: 用於JavaScript的Swagger實現。
Swagger-node-express: Swagger模組,用於node.js的Express web應用框架。
Swagger-ui:一個無依賴的HTML、JS和CSS集合,可以為Swagger相容API動態生成優雅文件。
Swagger-codegen:一個模板驅動引擎,通過分析使用者Swagger資源宣告以各種語言生成客戶端程式碼。

二、springboot整合流程

1.pom.xml中新增maven依賴

此處需要注意的是版本問題,高版本的swagger必須對應高版本的springboot,我們專案整合的是 springboot1.5.9 + swagger2.2.2

<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.增加SwaggerConfig配置類

/**
 * Swagger配置類
 * @Author: yuanj
 * @Date: 2018/9/17 13:43
 */
@Configuration
@EnableSwagger2
@ConditionalOnProperty(prefix = "msg-config", name = "swagger-open", havingValue = "true")
public class SwaggerConfig {

    @Bean
    public Docket createRestApi() {
        return new Docket(DocumentationType.SWAGGER_2)
                .apiInfo(apiInfo())
                .select()
                .apis(RequestHandlerSelectors.withMethodAnnotation(ApiOperation.class))                      //這裡採用包含註解的方式來確定要顯示的介面
                //.apis(RequestHandlerSelectors.basePackage("com.moerlong.service_authorize.controller"))    //這裡採用包掃描的方式來確定要顯示的介面
                .paths(PathSelectors.any())
                .build();
    }

    private ApiInfo apiInfo() {
        return new ApiInfoBuilder()
                .title("MoerService Gateway Doc")                       //標題
                .description("摩爾服務授權閘道器 Api文件")                  //描述
                .termsOfServiceUrl("http://www.moerlong.com")           //條款地址(不可見)
                .contact("moerlong")                                    //作者資訊
                .version("1.0")                                         //版本號
                .build();
    }

}

注意此處使用了@ConditionalOnProperty標籤,可以配合application.yml進行swagger的開關配置:

@ConditionalOnProperty(prefix = "msg-config", name = "swagger-open", havingValue = "true")

application.yml 中新增:

msg-config:
  swagger-open: true

其中name用來從application.yml中讀取某個屬性值,如果該值為空,則返回false;如果值不為空,則將該值與havingValue指定的值進行比較,如果一樣則返回true;否則返回false。如果返回值為false,則該configuration不生效;為true則生效。

3.在controller層新增相關注解

Swagger使用的註解及其說明:

@Api:用在類上,說明該類的作用。

@ApiOperation:註解來給API增加方法說明。

@ApiImplicitParams : 用在方法上包含一組引數說明。

@ApiImplicitParam:用來註解來給方法入參增加說明。

@ApiResponses:用於表示一組響應

@ApiResponse:用在@ApiResponses中,一般用於表達一個錯誤的響應資訊

@ApiModel:描述一個Model的資訊(一般用在請求引數無法使用@ApiImplicitParam註解進行描述的時候)

@ApiImplicitParam的引數說明:
在這裡插入圖片描述

paramType 必須與方法引數獲取使用的註解一致,不然無法接受到引數值

實際案例:

**
 * 服務授權閘道器入口
 * @Author: yuanj
 * @Date: 2018/9/7 10:15
 */
@RestController
@RequestMapping("/moerService")
@Api(value = "Access-Controller", description = "服務授權閘道器")
public class AccessController {

    @RequestMapping(value = "/access", method = RequestMethod.POST)
    @ApiOperation(value = "入口方法", notes = "將token、apiCode、version、businessParams組合為Map(Json)型別引數")
    @ApiImplicitParam(paramType = "body", name = "params", value = "組合引數", required = true, dataType = "Map(Json)")
    public Result access(@RequestBody Map params) throws Exception {
       ......
    }


    @RequestMapping(value = "/test", method = RequestMethod.GET)
    @ApiOperation(value = "測試方法", notes = "模擬使用者訪問")
    @ApiImplicitParams({
            @ApiImplicitParam(paramType = "query", name = "token", value = "令牌", required = true, dataType = "String"),
            @ApiImplicitParam(paramType = "query", name = "name", value = "客戶姓名", required = true, dataType = "String"),
            @ApiImplicitParam(paramType = "query", name = "idCard", value = "客戶身份證", required = true, dataType = "String")
    })
    public String test(@RequestParam(value = "token",required = true) String token,
                       @RequestParam(value = "name",required = true) String name,
                       @RequestParam(value = "idCard",required = true) String idCard) {
        ......
    }
}

4.訪問swagger地址

在這裡插入圖片描述

在這裡插入圖片描述

相關推薦

springboot專案整合swagger全過程

背景: 最近進行專案優化,增添swagger功能方便介面測試! 一、swagger簡介 Swagger 是一個規範和完整的框架,用於生成、描述、呼叫和視覺化 RESTful 風格的 Web 服務。總體目標是使客戶端和檔案系統作為伺服器以同樣的速度來更新。檔案的

springboot專案整合swagger版本改變遇到的問題

swagger要2.7.0版本到2.9.2會報錯但不影響正常使用,2.9.2降低2.7.0會無法進行訪問。 升版本伺服器會報以下錯誤: 解決方式:去除一些依賴 <!-- swagger pom 依賴 --> <

API管理-基於SpringBoot專案整合swagger實現介面文件自動生成

1. 為什麼要使用swagger? 上一次部落格(API管理-使用開源xxl-api專案管理介面)中我也提到過介面文件在整個生命

基於swagger進行介面文件的編寫 Maven + SpringMVC專案整合Swagger

0. 前言 近期忙於和各個銀行的代收介面聯調,根據遇到的問題,對之前編寫的介面進行了修改,需求收集和設計介面時想到了方方面面,生產環境下還是會遇到意想不到的問題,好在基本的執行邏輯已確定,因此只是對介面進行了一些微調,但是收錢無小事,之前在程式碼編寫時對引數進行了很多的校驗,程式碼修改之後一個引數的對不上都

springboot專案整合分散式定時任務Quartz

springboot中整合分散式定時任務Quartz的模本範例。參考這個配置,十分簡便 兩個bean配置,一個properties檔案,一個sql檔案,使用的為mysql. QRTZ_tables_mysql_innodb.sql # # In your Quartz properties

springboot專案整合Dubbo

SpringBoot框架下雖然能夠提供restfull的http遠端訪問方式,但是缺乏基於微服務的整體SOA治理方案,比如服務註冊,發現,治理等。因此此篇的核心就是在SpringBoot框架下整合一個執行緒的微服務阿里的Dubbo,然後給客戶端保留微服務介面。 SpringBoot整合Dubbo

SpringBoot整合swagger形成API文件

SpringBoot中整合swagger形成API文件 環境版本 開始使用 1.新增依賴 2.新增Swagger2配置類 3.在Controller中使用 4.訪問 環境版本 springboo

Asp.Net MVC專案整合Swagger

  公司最近的專案使用mvc+webapi,採取前後端分離的方式,後臺提供API介面給前端開發人員。這個過程中遇到一個問題後臺開發人員怎麼提供介面說明文件給前端開發人員,之前一直使用的是word文件方式進行交流,效率低下而且不利於維護。為了解決這個問題,經過一番研究,引起我注意的有兩種方案。1.微軟自帶的Mi

springboot專案整合reids並使用

宣告: 此文章為springboot 2.0版本整合redis。並簡單示範,儲存redis和獲取redis中資料的方法、 此處springboot專案的搭建略過。主要記錄redis的整合和使用 整合步驟: 第一步:pom檔案新增redis依賴 <de

springboot(6)--整合swagger

個人覺得swagger有點類似於阿里的hsf ops,只不過hsf ops是用於線上測試分散式服務,而swagger是用於線上測試rest api,感覺springboot整合swagger需要好多註解。。。。 0.在pom檔案引入依賴 <dependency>

Springboot專案整合MongoDB

Springboot專案整合MongoDB 本文主要記錄在Springboot專案中整合MongoDB,並演示增刪改查,以及分頁查詢。 1 整合MongoDB 1.1 引入依賴 在sparingboot專案中引入MongoDB依賴 <!--mongodb-->

springboot專案整合大眾點評cat

什麼是CAT Cat是基於Java開發的實時應用監控平臺,為美團點評提供了全面的實時監控告警服務 • CAT作為服務端專案基礎元件,提供了java, c/c++, node, python, go等多語言客戶端,已經在美團點評的基礎架構中介軟體框架(MVC框架,

SpringBoot探索二】SpringBoot專案整合日誌記錄功能

在之前專案的基礎上新增日誌 1.讓專案具有輸出日誌功能 在pom檔案中加入依賴 <dependency> <groupId>org.springframework.boot</groupId>

2 springboot專案整合使用disconf,基於docker環境

上一篇我們完成了disconf服務端的環境搭建,這一篇我們來看看客戶端springboot如何繼承disconf,最終在docker下執行。假定你已經在本機搭建好了disconf的web端環境,並已經能使用localhost訪問到disconf的web介面。下面看客戶端如何使

踩坑: springboot專案整合mongodb, 報Consider defining a bean of type com.xxRepository'in your configuration.

踩坑背景:  專案採用gradle分散式開發,現如今產品需要新增新功能,新功能我這邊準備開啟一個新的module來進行開發,在原來的基礎上開發出一個新的模組,一切依賴都搞定後,程式碼也寫了,就啟動準備測試一下,結果發現專案居然報錯.啟動不起來. 如上圖,直接報錯,一看是Acti

SpringBoot探索五】SpringBoot專案整合Mybatis框架之使用Mybatis Plus外掛

Mybatis Plus是一款非常優秀的Mybatis擴充套件外掛,該開源專案是由國人發起的。使用該外掛可以簡化我們的開發,它有很多優良的特性,比如通用CRUD操作,支援ActiveRecord,內建分頁外掛等等。 1.新增pom依賴 <!--

SpringBoot專案整合Ueditor富文字

一、官網下載ueditor原始碼(https://ueditor.baidu.com/website/download.html),javaweb專案使用jsp版,解壓後的檔案目錄如下:      二、將原始碼新增到專案中   &nbs

springboot專案整合Swagger2

    不僅僅是springboot,其他spring專案均可整合swagger,在專案開發中,眾多的介面都要有介面文件,並且很容易出現紕漏和程式碼與文件不一致的情況,利用swagger來自動生成api文件,讓程式碼維護與文件維護保持一致,大大減少文件編寫和維護

SpringBoot整合swagger

1、引入依賴 <!--swagger--> <dependency> <groupId>io.springfox</groupId> <artifactId>springfox-swagger2&l

springboot專案整合vue

  由於特殊原因,所以臨危受命將vue整合到springboot的專案中,終於在忙活了一天之後成功搞定,下面就分享一下這次的整合過程:  1建立springboot和vue專案            springboot以及vue專案都已經由前後端同事分別開發完成,這裡就