1. 程式人生 > >SpringBoot Swagger2整合

SpringBoot Swagger2整合

Swagger簡介 

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

SpringBoot整合Swagger2

SpringBoot整合Swagger2只需要以下幾個步驟:Step1.匯入依賴:                                                                                                  
		<dependency>
			<groupId>io.springfox</groupId>
			<artifactId>springfox-swagger2</artifactId>
			<version>2.7.0</version>
		</dependency>
		<dependency>
			<groupId>io.springfox</groupId>
			<artifactId>springfox-swagger-ui</artifactId>
			<version>2.7.0</version>
		</dependency>
Step2.新建一個Swagger的配置類
package com.reset.config;

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

/**
 * Created by chendai on 2018/3/21.
 */
@Configuration
@EnableSwagger2
public class SwaggerConfig {

    @Bean
    public Docket docket(){
        return new Docket(DocumentationType.SWAGGER_2).apiInfo(apiInfo()).select()
//                   當前包路徑
                   .apis(RequestHandlerSelectors.basePackage("com.reset.controller"))
                    .paths(PathSelectors.any()).build();

    }
//構建api文件的詳細資訊函式
    private ApiInfo apiInfo(){
        return new ApiInfoBuilder()
                //頁面標題
                    .title("springBoot測試使用Swagger2構建RESTful API")
                //建立人
                    .contact(new Contact("chendai","http://www.baidu.com",""))
                 //版本號
                    .version("1.0")
                //描述
                    .description("API 描述")
                    .build();
    }
}
Step3.使用Swagger2進行測試:  使用Swagger2進行測試的類我們選擇在controller層:
package com.reset.controller;

import com.reset.model.RestMessgae;
import io.swagger.annotations.*;
import org.springframework.web.bind.annotation.*;

/**
 * Created by chendai on 2018/3/19.
 */
@RestController
@Api("swaggerTestController相關api")
public class TestController {

    /**
     * Restful Get請求測試
     */
    @ApiOperation(value = "根據id查詢學生的資訊",notes = "查詢資料庫中某個學生的資訊")
    @ApiImplicitParam(name ="id",value = "學生id",paramType = "path",required = true,dataType = "String")
    @ApiImplicitParams({
            @ApiImplicitParam(name = "id",value = "使用者id",dataType = "String",paramType = "query",example = "1112")
    })
    @ApiResponses({
            @ApiResponse(code=400,message = "請求引數沒有填好"),
            @ApiResponse(code=404,message="請求路徑沒有找到")
    })
    @GetMapping(value = "testRest/{id}")
    public RestMessgae testGetResetful(@PathVariable String id){
       RestMessgae restMessgae = new RestMessgae();
        System.out.println(id);
        return restMessgae;
    }
    
}
開啟瀏覽器訪問“http://localhost:8080/swagger-ui.html”會看到如下的介面在輸入框中輸入id的值後點擊”Try it out“按鈕,我們可以檢視到下面的結果:
這樣測試結果就非常的明顯了。

Swagger2註解說明

@Api():作用於類上,表示這個類是swagger的資源。    tags = ”說明該類的作用“@ApiOperation():用在請求的方法上,說明的方法的使用者和作用    value=“說明方法的用途、作用”    notes="方法的備註說明“@ApiImplicitParams():用在請求的方法上,表示一組引數說明,可以包含多個@ApiImplicitParam()@ApiImplicitParam():指定一個請求引數的各個方面       name:引數名       value:引數的漢字說明       required:引數是否必須傳       dataType:引數型別       defaultValue:引數的預設值@ApiResponses():用在請求的方法上,表示一組響應。可以包含多個@ApiResponse()@ApiResponse():用於表示一個錯誤的響應資訊    code:數字    message:資訊    response:丟擲異常的類      @ApiModel():用在響應類上,表示一個返回響應資料的資訊。@ApiModelProperty():用在屬性上,描述響應類的屬性@ApiModel() 和 @ApiModelProperty() 使用示例如下:
package com.reset.model;

import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;

/**
 * Created by chendai on 2018/3/21.
 */
@ApiModel(description = "返回響應資料")
public class RestMessgae {

    @ApiModelProperty(value = "錯誤資訊")
    private String message;
    @ApiModelProperty(value = "狀態碼")
    private String code;
    @ApiModelProperty(value = "返回的資料")
    private Object data;

    public String getMessage() {
        return message;
    }

    public void setMessage(String message) {
        this.message = message;
    }

    public String getCode() {
        return code;
    }

    public void setCode(String code) {
        this.code = code;
    }

    public Object getData() {
        return data;
    }

    public void setData(Object data) {
        this.data = data;
    }
}