最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

SpringBoot集成swagger3.0指南分享

 更新時(shí)間:2024年11月29日 09:10:28   作者:清淡的粥  
本文介紹了如何在Spring Boot項(xiàng)目中集成Swagger 3.0,包括添加依賴、配置Swagger、在Controller上添加注解以及配置訪問權(quán)限

一、Swagger介紹

  • 號(hào)稱世界上最流行的Api框架;
  • Restful Api 文檔在線自動(dòng)生成工具=>Api文檔與API定義同步更新
  • 直接運(yùn)行,可以在在線測(cè)試API 接口
  • 支持多種語言:(java,Php…)

官網(wǎng)地址:https://swagger.io/

1.springfox-swagger 2

SpringBoot項(xiàng)目整合Swagger2需要用到兩個(gè)依賴:springfox-swagger2和springfox-swagger-ui,用于自動(dòng)生成swagger文檔。

  • springfox-swagger2:這個(gè)組件的功能用于幫助我們自動(dòng)生成描述API的json文件。
  • springfox-swagger-ui:就是將描述API的json文件解析出來,用一種更友好的方式呈現(xiàn)出來。

2.SpringFox 3.0.0 發(fā)布

此版本的亮點(diǎn):

  • Spring5,Webflux支持(僅支持請(qǐng)求映射,尚不支持功能端點(diǎn))。
  • Spring Integration支持。
  • SpringBoot支持springfox Boot starter依賴性(零配置、自動(dòng)配置支持)。
  • 支持OpenApi 3.0.3。
  • 零依賴。幾乎只需要spring-plugin,swagger-core ,現(xiàn)有的swagger2注釋將繼續(xù)工作并豐富openapi3.0規(guī)范。

兼容性說明:

  • 需要Java 8
  • 需要Spring5.x(未在早期版本中測(cè)試)
  • 需要SpringBoot 2.2+(未在早期版本中測(cè)試)

注意:Swagger2.0Swagger3.0有很多區(qū)別,下面使用的是Swagger3.0,有區(qū)別的地方會(huì)簡(jiǎn)單說明。

二、SpringBoot 集成 swagger 3.0

1. 添加Maven依賴

引入依賴springfox-boot-starter:

<!-- 引入Swagger3依賴 -->
<dependency>
    <groupId>io.springfox</groupId>
    <artifactId>springfox-boot-starter</artifactId>
    <version>3.0.0</version>
</dependency>

2. 創(chuàng)建配置類配置Swagger

自定義配置信息:

3.0版本在配置上與2.9稍有差別,包括依賴包改為: springfox-boot-starter,啟用注解更改為: @EnableOpenApi等。

  • Swagger3.0 注解:@EnableOpenApi
  • Swagger2.0 注解:@EnableSwagger2

2.1 創(chuàng)建SwaggerConfig 配置類

package com.test.web.core.config;

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

import io.swagger.annotations.Api;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import com.test.common.config.TestInfoConfig;
import io.swagger.annotations.ApiOperation;
import io.swagger.models.auth.In;
import springfox.documentation.builders.ApiInfoBuilder;
import springfox.documentation.builders.PathSelectors;
import springfox.documentation.builders.RequestHandlerSelectors;
import springfox.documentation.oas.annotations.EnableOpenApi;
import springfox.documentation.service.ApiInfo;
import springfox.documentation.service.ApiKey;
import springfox.documentation.service.AuthorizationScope;
import springfox.documentation.service.Contact;
import springfox.documentation.service.SecurityReference;
import springfox.documentation.service.SecurityScheme;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spi.service.contexts.SecurityContext;
import springfox.documentation.spring.web.plugins.Docket;

/**
 * Swagger3的接口配置
 *
 * @author fy
 */
@Configuration
//默認(rèn)開啟 可注釋
//@EnableOpenApi
public class SwaggerConfig {

    /**
     * 系統(tǒng)基礎(chǔ)配置  yml文件可配置讀取
     */
    @Autowired
    private TestInfoConfig testInfoConfig;

    /**
     * 是否開啟swagger
     */
    @Value("${swagger.enabled}")
    private boolean enabled;

    /**
     * 設(shè)置請(qǐng)求的統(tǒng)一前綴
     */
    @Value("${swagger.pathMapping}")
    private String pathMapping;

    /**
     * 創(chuàng)建API
     */
    @Bean
    public Docket createRestApi() {

        return new Docket(DocumentationType.OAS_30)
                 // 使用 swagger 開關(guān)。默認(rèn) true
                .enable(enabled)
                // 用來創(chuàng)建該API的基本信息,展示在文檔的頁(yè)面中(自定義展示的信息)
                .apiInfo(apiInfo())
                // 設(shè)置哪些接口暴露給Swagger展示
                .select()
                // 掃描所有有注解的api,用這種方式更靈活
                // 以 @ApiOperation 注解為依據(jù)進(jìn)行掃描
                .apis(RequestHandlerSelectors.withMethodAnnotation(ApiOperation.class))
                // 以 @Api 注解為依據(jù)進(jìn)行掃描
                .apis(RequestHandlerSelectors.withClassAnnotation(Api.class))
                // 掃描指定包中的swagger注解
                //.apis(RequestHandlerSelectors.basePackage("com.test.web"))
                // 掃描所有
                // .apis(RequestHandlerSelectors.any())

                //過濾器:對(duì)外暴露所有 URI
                .paths(PathSelectors.any())
                //.paths(none())  // 過濾器:一個(gè) URI 都不對(duì)外暴露
                //.paths(ant())   // 過濾器:對(duì)外暴露符合 ANT 風(fēng)格正則表達(dá)式的 URI
                //.paths(regex()  // 過濾器:對(duì)外暴露符合正則表達(dá)式的 URI

                .build()
                //設(shè)置安全模式,swagger可以設(shè)置訪問token
                .securitySchemes(securitySchemes())
                .securityContexts(securityContexts());
//                .pathMapping(pathMapping)
    }

    /**
     * 安全模式,這里指定token通過Authorization頭請(qǐng)求頭傳遞
     */
    private List<SecurityScheme> securitySchemes() {
        List<SecurityScheme> apiKeyList = new ArrayList<SecurityScheme>();
        apiKeyList.add(new ApiKey("Authorization", "Authorization", In.HEADER.toValue()));
        return apiKeyList;
    }

    /**
     * 安全上下文
     */
    private List<SecurityContext> securityContexts() {
        List<SecurityContext> securityContexts = new ArrayList<>();
        securityContexts.add(
                SecurityContext.builder()
                        .securityReferences(defaultAuth())
                        .operationSelector(o -> o.requestMappingPattern().matches("/.*"))
                        .build());
        return securityContexts;
    }

    /**
     * 默認(rèn)的安全上引用
     */
    private List<SecurityReference> defaultAuth() {
        AuthorizationScope authorizationScope = new AuthorizationScope("global", "accessEverything");
        AuthorizationScope[] authorizationScopes = new AuthorizationScope[1];
        authorizationScopes[0] = authorizationScope;
        List<SecurityReference> securityReferences = new ArrayList<>();
        securityReferences.add(new SecurityReference("Authorization", authorizationScopes));
        return securityReferences;
    }

    /**
     * 添加摘要信息
     */
    private ApiInfo apiInfo() {
        // 用ApiInfoBuilder進(jìn)行定制
        return new ApiInfoBuilder()
                // 設(shè)置標(biāo)題
                .title("Test API文檔")
                // 描述
                .description("某物聯(lián)網(wǎng)平臺(tái)接口文檔說明")
                // 作者信息
                .contact(new Contact(testInfoConfig.getName(), "http://aaaa.com", "ahsjda@163.com"))
                // 版本
                .version(testInfoConfig.getVersion())
                .build();
    }
}

2.2 創(chuàng)建TestInfoConfig信息配置類

package com.test.common.config;

import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;

/**
 * 讀取項(xiàng)目相關(guān)配置
 *
 * @author fy
 */
@Component
@ConfigurationProperties(prefix = "test")
@Data
public class TestInfoConfig{
    /**
     * 項(xiàng)目名稱
     */
    private String name;

    /**
     * 版本
     */
    private String version;

    /**
     * 版權(quán)年份
     */
    private String copyrightYear;
}

TestInfoConfig Yml配置信息如下圖所示:

3. 在你的Controller上添加swagger注解

4. 如啟用了訪問權(quán)限,還需將swagger相關(guān)uri允許匿名訪問

具體需要添加的uri有:

/swagger**/**
/webjars/**
/v3/**
/doc.html

5. 啟動(dòng)與訪問

啟動(dòng)應(yīng)用,訪問地址http://localhost:8080/swagger-ui/index.html

Swagger2.0 、Swagger3.0訪問地址區(qū)別:

  • Swagger3.0 訪問地址:http://localhost:8080/swagger-ui/index.html
  • Swagger2.0 訪問地址:http://localhost:8080/swagger-ui.html

總結(jié)

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

最新評(píng)論

弥渡县| 衡阳市| 柳林县| 泾川县| 全南县| 安塞县| 滕州市| 高尔夫| 鄂尔多斯市| 衡东县| 博湖县| 科技| 屯门区| 潍坊市| 武乡县| 凤城市| 泰州市| 沭阳县| 山东| 岳普湖县| 清丰县| 启东市| 和静县| 四会市| 耒阳市| 阜城县| 芮城县| 资源县| 辽阳县| 揭阳市| 嵊州市| 察雅县| 孝感市| 兴隆县| 南乐县| 文昌市| 恭城| 逊克县| 邓州市| 富顺县| 福建省|