1. 程式人生 > 實用技巧 >springboot整合swagger2

springboot整合swagger2

  swagger是一個不錯的介面生成工具,而且其UI介面可以檢視以及測試介面。

  之前前後端分離的時候是將文件寫在docx中,然後自己測試用postman進行測試。確實比較浪費時間。

1.簡單的整合

1.增加配置檔案:

package com.zd.bx.config.swapper2;

import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry; import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; 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; @Configuration @EnableSwagger2
// 是否開啟swagger,正式環境一般是需要關閉的(避免不必要的漏洞暴露!),可根據springboot的多環境配置進行設定 @ConditionalOnProperty(name = "swagger.enable", havingValue = "true") public class Swagger2Configure implements WebMvcConfigurer { // swagger2的配置檔案,這裡可以配置swagger2的一些基本的內容,比如掃描的包等等 @Bean public Docket createRestApi() { return new Docket(DocumentationType.SWAGGER_2).apiInfo(apiInfo()).select() // 為當前包路徑 .apis(RequestHandlerSelectors.basePackage("com.zd.bx.controller")).paths(PathSelectors.any()).build(); } // 構建 api文件的詳細資訊函式,注意這裡的註解引用的是哪個 private ApiInfo apiInfo() { return new ApiInfoBuilder() // 頁面標題 .title("XXX軟體介面描述") // 建立人資訊 .contact(new Contact("張三", "https://www.baidu.com/", "[email protected]")) // 版本號 .version("1.0") // 描述 .description("API 描述").build(); } @Override public void addResourceHandlers(ResourceHandlerRegistry registry) { registry.addResourceHandler("swagger-ui.html").addResourceLocations("classpath:/META-INF/resources/"); registry.addResourceHandler("/webjars/**").addResourceLocations("classpath:/META-INF/resources/webjars/"); } }

2.application.properties啟用swagger2

#是否啟用 swagger true or false
swagger.enable=true

如果有攔截器或者許可權過濾器需要放行swagger相關請求:

例如我的shiro許可權配置如下:

        FILTER_CHAIN_DEFINITION_MAP.put("/swagger-ui.html", "anon"); // swagger放開
        FILTER_CHAIN_DEFINITION_MAP.put("/webjars/**", "anon"); // swagger請求的資源放開
        FILTER_CHAIN_DEFINITION_MAP.put("/swagger-resources/**", "anon"); // swagger請求的資源放開
        FILTER_CHAIN_DEFINITION_MAP.put("/v2/api-docs/**", "anon"); // swagger請求的資源放開

3. 啟動應用訪問:

2.註解使用

1.@Api 修飾類

// tags:說明該類的作用,可以在UI介面上看到的註解,value=該引數沒什麼意義、在UI介面上也看到
@Api(tags = { "使用者介面" })
public class UserController extends AbstractController<User, Long> {

如下:

2.@ApiOperation 方法描述

3.@ApiResponses、@ApiResponse修飾返回值資訊

4.@ApiImplicitParam 引數描述

5.@ApiModel、@ApiModelProperty 修飾請求的引數和返回引數的資訊(用於JSON請求引數和返回值)

例如:

    @GetMapping("/detail/{id}")
    // 方法描述
    @ApiOperation(value = "詳情", notes = "查詢詳情")
    // 返回資訊描述
    @ApiResponses({ @ApiResponse(code = -1, message = "請求正確") })
    // 引數描述
    @ApiImplicitParam(name = "id", value = "請求的ID", required = true)
    public JSONResultUtil<T> detail(@PathVariable() E id, HttpServletRequest request) {
        T bean = getBaseService().selectById(id);
        ValidateUtils.isTrue(bean != null, "u100003");

        return JSONResultUtil.successWithMsgAndData("ok", bean);
    }

結果:

3. 如果希望在用UI請求的時候攜帶引數,比如cookie、header等引數

package com.zd.bx.config.swapper2;

import java.util.ArrayList;
import java.util.List;

import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;

import com.zd.bx.utils.constant.DefaultValue;

import springfox.documentation.builders.ApiInfoBuilder;
import springfox.documentation.builders.ParameterBuilder;
import springfox.documentation.builders.PathSelectors;
import springfox.documentation.builders.RequestHandlerSelectors;
import springfox.documentation.schema.ModelRef;
import springfox.documentation.service.ApiInfo;
import springfox.documentation.service.Contact;
import springfox.documentation.service.Parameter;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spring.web.plugins.Docket;
import springfox.documentation.swagger2.annotations.EnableSwagger2;

@Configuration
@EnableSwagger2
// 是否開啟swagger,正式環境一般是需要關閉的(避免不必要的漏洞暴露!),可根據springboot的多環境配置進行設定
@ConditionalOnProperty(name = "swagger.enable", havingValue = "true")
public class Swagger2Configure implements WebMvcConfigurer {

    // swagger2的配置檔案,這裡可以配置swagger2的一些基本的內容,比如掃描的包等等
    @Bean
    public Docket createRestApi() {
        // 增加請求頭配置
        ParameterBuilder params = new ParameterBuilder();
        List<Parameter> pars = new ArrayList<Parameter>();
        // 設定引數的名字以及型別:可以是cookie、header等資訊
        Parameter access_token = new ParameterBuilder().name(DefaultValue.TOKEN_KEY).description("access_token")
                .modelRef(new ModelRef("string")).parameterType("header").required(false).build();
        Parameter belong_database = new ParameterBuilder().name(DefaultValue.DATABASE_NAME_KEY)
                .description("belong_database").modelRef(new ModelRef("string")).parameterType("header").required(false)
                .build();
        pars.add(access_token);
        pars.add(belong_database);

        return new Docket(DocumentationType.SWAGGER_2).apiInfo(apiInfo()).select()
                .apis(RequestHandlerSelectors.basePackage("com.zd.bx.controller")).paths(PathSelectors.any()).build()
                .globalOperationParameters(pars);

    }

    private ApiInfo apiInfo() {
        return new ApiInfoBuilder()
                // 頁面標題
                .title("XXX軟體介面描述")
                // 建立人資訊
                .contact(new Contact("張三", "https://www.baidu.com/", "[email protected]"))
                // 版本號
                .version("1.0")
                // 描述
                .description("API 描述").build();
    }

    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        registry.addResourceHandler("swagger-ui.html").addResourceLocations("classpath:/META-INF/resources/");
        registry.addResourceHandler("/webjars/**").addResourceLocations("classpath:/META-INF/resources/webjars/");
    }
}

結果: