天天看點

Springboot內建Swagger2

swagger是一個友善後端編寫接口文檔的開源項目,并提供界面化測試。

項目搭建

maven依賴

<!--swagger2-->
<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>
           
注:必須使用7.0 及以上的包

建立 SwaggerConfig類

Springboot內建Swagger2
package com.yxl.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 位址
 * http://127.0.0.1:8080/swagger-ui.html
 */
@Configuration
@EnableSwagger2
public class SwaggerConfig {

    /**
     * 通過 createRestApi函數來建構一個DocketBean
     * 函數名,可以随意命名,喜歡什麼命名就什麼命名
     */
    @Bean
    public Docket createRestApi() {
        return new Docket(DocumentationType.SWAGGER_2)
                .apiInfo(apiInfo())//調用apiInfo方法,建立一個ApiInfo執行個體,裡面是展示在文檔頁面資訊内容
                .select()
                //控制暴露出去的路徑下的執行個體
                //如果某個接口不想暴露,可以使用以下注解
                //@ApiIgnore 這樣,該接口就不會暴露在 swagger2 的頁面下
                .apis(RequestHandlerSelectors.basePackage("com.yxl.modules.controller"))
                .paths(PathSelectors.any())

                .build()
                .groupName("yxl 項目 1.0 API文檔");
    }


    //建構 api文檔的詳細資訊函數
    private ApiInfo apiInfo() {
        return new ApiInfoBuilder()
                //頁面标題
                .title("Spring Boot Swagger2 建構RESTful API")
                .version("1.0")
                .contact("yxl")
                //描述
                .description("API 描述")
                .build();
    }
}
           

測試swagger 編寫 controller 類

package com.yxl.modules.controller;


import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;

import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

/**
 * <p>
 * 部落格表 前端控制器
 * </p>
 *
 * @author yxl
 * @since 2020-05-17
 */
@Api( tags = "管理 API")
@RestController
@RequestMapping("/blog")
public class BlogController {

    @ApiOperation(value = "查詢清單",notes = "查詢清單",httpMethod = "GET")
    @GetMapping("/list")
    public String index(@ApiParam(value = "名字")@RequestParam String name) {

        return "hello "+ name;
    }
}           

啟動項目

通路 swagger2 位址

常用注解:
  • @Api()用于類; 表示辨別這個類是swagger的資源
  • @ApiOperation()用于方法; 表示一個http請求的操作
  • @ApiParam()用于方法,參數,字段說明; 表示對參數的添加中繼資料(說明或是否必填等)
  • @ApiModel()用于類 表示對類進行說明,用于參數用實體類接收
  • @ApiModelProperty()用于方法,字段 表示對model屬性的說明或者資料操作更改
  • @ApiIgnore()用于類,方法,方法參數 表示這個方法或者類被忽略
  • @ApiImplicitParam() 用于方法 表示單獨的請求參數
  • @ApiImplicitParams() 用于方法,包含多個 @ApiImplicitParam

@Api()

用于類;表示辨別這個類是swagger的資源

tags–表示說明

value–也是說明,可以使用tags替代

但是tags如果有多個值,會生成多個list

@Api(value="使用者controller",tags={"使用者操作接口"})
@RestController
public class UserController {

}           

@ApiOperation() 用于方法;表示一個http請求的操作

value用于方法描述

notes用于提示内容

tags可以重新分組(視情況而用)

@ApiParam() 用于方法,參數,字段說明;表示對參數的添加中繼資料(說明或是否必填等)

name–參數名

value–參數說明

required–是否必填

@Api(value="使用者controller",tags={"使用者操作接口"})
@RestController
public class UserController {
     @ApiOperation(value="擷取使用者資訊",tags={"擷取使用者資訊copy"},notes="注意問題點")
     @GetMapping("/getUserInfo")
     public User getUserInfo(@ApiParam(name="id",value="使用者id",required=true) Long id,@ApiParam(name="username",value="使用者名") String username) {
     // userService可忽略,是業務邏輯
      User user = userService.getUserInfo();

      return user;
  }
}