1. 程式人生 > >springboot系列十三、springboot整合swaggerUI

springboot系列十三、springboot整合swaggerUI

一、Swagger介紹

Swagger能成為最受歡迎的REST APIs文件生成工具之一,有以下幾個原因:

  • Swagger 可以生成一個具有互動性的API控制檯,開發者可以用來快速學習和嘗試API。
  • Swagger 可以生成客戶端SDK程式碼用於各種不同的平臺上的實現。
  • Swagger 檔案可以在許多不同的平臺上從程式碼註釋中自動生成。
  • Swagger 有一個強大的社群,裡面有許多強悍的貢獻者。

Swagger 文件提供了一個方法,使我們可以用指定的 JSON 或者 YAML 摘要來描述你的 API,包括了比如 names、order 等 API 資訊。

你可以通過一個文字編輯器來編輯 Swagger 檔案,或者你也可以從你的程式碼註釋中自動生成。各種工具都可以使用 Swagger 檔案來生成互動的 API 文件。

二、配置及使用Swagger

1、引入依賴

<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>

2、新增配置類:SwaggerConfig.java

package com.example.demo.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.spi.DocumentationType; import springfox.documentation.spring.web.plugins.Docket; import springfox.documentation.swagger2.annotations.EnableSwagger2; /** * Swagger2配置類 * 在與spring boot整合時,放在與Application.java同級的目錄下。 * 通過@Configuration註解,讓Spring來載入該類配置。 * 再通過@EnableSwagger2註解來啟用Swagger2。 */ @Configuration @EnableSwagger2 public class SwaggerConfig { /** * 建立API應用 * apiInfo() 增加API相關資訊 * 通過select()函式返回一個ApiSelectorBuilder例項,用來控制哪些介面暴露給Swagger來展現, * 本例採用指定掃描的包路徑來定義指定要建立API的目錄。 * * @return */ @Bean public Docket createRestApi() { return new Docket(DocumentationType.SWAGGER_2) .apiInfo(apiInfo()) .select() .apis(RequestHandlerSelectors.basePackage("com.example.demo")) .paths(PathSelectors.any()) .build(); } /** * 建立該API的基本資訊(這些基本資訊會展現在文件頁面中) * 訪問地址:http://專案實際地址/swagger-ui.html * @return */ private ApiInfo apiInfo() { return new ApiInfoBuilder() .title("Spring Boot中使用Swagger2構建RESTful APIs") .description("更多請關注:部落格園小人物的奮鬥") .termsOfServiceUrl("http://www.cnblogs.com/wangzhuxing") .contact("xing") .version("1.0") .build(); } }

3、使用示例

1、註解Controller類

@Controller
@RequestMapping("/User")
@Api(description = "測試swagger註解的demo")
public class HelloWorldController {
  @ResponseBody
  @RequestMapping(value = "/getAllUser" ,method = RequestMethod.POST)
  @ApiOperation(value = "獲取使用者資訊",notes = "返回單個使用者資訊")
  public List<UserPO> getAllUser(@ApiParam(required = false) @RequestBody User user) {
  userService.addUser();
  return userService.findAll();
  }
}

2、註解入參和出參

package com.example.demo.bean;
import io.swagger.annotations.ApiModelProperty;
import java.io.Serializable;

public class User implements Serializable {
    @ApiModelProperty(value = "使用者id" ,example = "11")
    private Long uid;
    @ApiModelProperty(value = "使用者姓名",example = "小明")
    private String name;
    @ApiModelProperty(value = "使用者年齡",example = "25")
    private Integer age;
    public Long getUid() {
        return uid;
    }
    public void setUid(Long uid) {
        this.uid = uid;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public Integer getAge() {
        return age;
    }
    public void setAge(Integer age) {
        this.age = age;
    }
}

4、驗證效果

訪問:http://192.168.1.100:8080/swagger-ui.html

 三、常見用法和說明

  1. @Api:用在類上,說明該類的作用。
  2. @ApiOperation:註解來給API增加方法說明。
  3. @ApiImplicitParams : 用在方法上包含一組引數說明。
  4. @ApiImplicitParam:用來註解來給方法入參增加說明。
  5. @ApiResponses:用於表示一組響應
  6. @ApiModel:描述一個Model的資訊(一般用在請求引數無法使用@ApiImplicitParam註解進行描述的時候)

        l   @ApiModelProperty:描述一個model的屬性

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

           l   code:數字,例如400

      l   message:資訊,例如"請求引數沒填好"

      l   response:丟擲異常的類  

 

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

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

2.   Swagger-core: 用於Java/Scala的的Swagger實現。與JAX-RS(Jersey、Resteasy、CXF...)、Servlets和Play框架進行整合。

3.   Swagger-js: 用於JavaScript的Swagger實現。

4.   Swagger-node-express: Swagger模組,用於node.js的Express web應用框架。

5.   Swagger-ui:一個無依賴的HTML、JS和CSS集合,可以為Swagger相容API動態生成優雅文件。

6.   Swagger-codegen:一個模板驅動引擎,通過分析使用者Swagger資源宣告以各種語言生成客戶端程式碼。