欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

SpringBoot集成swagger3.0指南分享

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

一、Swagger介紹

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

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

1.springfox-swagger 2

SpringBoot項目整合Swagger2需要用到兩個依賴:springfox-swagger2和springfox-swagger-ui,用于自動生成swagger文檔。

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

2.SpringFox 3.0.0 發(fā)布

此版本的亮點:

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

兼容性說明:

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

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

二、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
//默認開啟 可注釋
//@EnableOpenApi
public class SwaggerConfig {

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

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

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

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

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

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

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

    /**
     * 安全模式,這里指定token通過Authorization頭請求頭傳遞
     */
    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;
    }

    /**
     * 默認的安全上引用
     */
    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進行定制
        return new ApiInfoBuilder()
                // 設(shè)置標題
                .title("Test API文檔")
                // 描述
                .description("某物聯(lián)網(wǎng)平臺接口文檔說明")
                // 作者信息
                .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;

/**
 * 讀取項目相關(guān)配置
 *
 * @author fy
 */
@Component
@ConfigurationProperties(prefix = "test")
@Data
public class TestInfoConfig{
    /**
     * 項目名稱
     */
    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. 啟動與訪問

啟動應(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é)

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

相關(guān)文章

  • JDBC+GUI實現(xiàn)簡單學(xué)生管理系統(tǒng)

    JDBC+GUI實現(xiàn)簡單學(xué)生管理系統(tǒng)

    這篇文章主要為大家詳細介紹了JDBC+GUI實現(xiàn)簡單學(xué)生管理系統(tǒng),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-02-02
  • Java漢字轉(zhuǎn)拼音工具類完整代碼實例

    Java漢字轉(zhuǎn)拼音工具類完整代碼實例

    這篇文章主要介紹了java漢字轉(zhuǎn)拼音工具類完整代碼實例,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習或者工作具有一定的參考學(xué)習價值,需要的朋友可以參考下
    2020-03-03
  • 詳解java Collections.sort的兩種用法

    詳解java Collections.sort的兩種用法

    這篇文章主要介紹了詳解java Collections.sort的兩種用法,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習或者工作具有一定的參考學(xué)習價值,需要的朋友們下面隨著小編來一起學(xué)習學(xué)習吧
    2020-07-07
  • SpringBoot整合DeepSeek技術(shù)指南(實際應(yīng)用場景)

    SpringBoot整合DeepSeek技術(shù)指南(實際應(yīng)用場景)

    這篇文章主要介紹了SpringBoot整合DeepSeek技術(shù)指南,本文通過實際應(yīng)用場景模擬給大家介紹的非常詳細,感興趣的朋友一起看看吧
    2025-04-04
  • Spring Boot Admin 動態(tài)修改日志級別的方法步驟

    Spring Boot Admin 動態(tài)修改日志級別的方法步驟

    這篇文章主要介紹了Spring Boot Admin 動態(tài)修改日志級別的方法步驟,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習或者工作具有一定的參考學(xué)習價值,需要的朋友們下面隨著小編來一起學(xué)習學(xué)習吧
    2020-08-08
  • java語法糖之jdk迭代的新特性匯總

    java語法糖之jdk迭代的新特性匯總

    什么是語法糖?泛型、自動裝箱拆箱、變長參數(shù)、增強for循環(huán)、switch字符類型、lambda表達式等,這些其實都是語法糖。這篇文章主要給大家介紹了關(guān)于java語法糖之jdk迭代的新特性的相關(guān)資料,需要的朋友可以參考下
    2021-05-05
  • JAVA HashSet和TreeSet 保證存入元素不會重復(fù)的操作

    JAVA HashSet和TreeSet 保證存入元素不會重復(fù)的操作

    這篇文章主要介紹了JAVA HashSet和TreeSet 保證存入元素不會重復(fù)的操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-09-09
  • SpringBoot如何接收前端傳遞參數(shù)

    SpringBoot如何接收前端傳遞參數(shù)

    這篇文章主要介紹了SpringBoot如何接收前端傳遞參數(shù),本文給大家介紹的非常詳細,對大家的學(xué)習或工作具有一定的參考借鑒價值,需要的朋友參考下吧
    2024-08-08
  • java實現(xiàn)請求緩沖合并的示例代碼

    java實現(xiàn)請求緩沖合并的示例代碼

    我們對外提供了一個rest接口給第三方業(yè)務(wù)進行調(diào)用,但是由于第三方框架限制,導(dǎo)致會發(fā)送大量相似無效請求,這篇文章主要介紹了java實現(xiàn)請求緩沖合并,需要的朋友可以參考下
    2024-04-04
  • Java中如何檢查數(shù)組是否包含某整數(shù)

    Java中如何檢查數(shù)組是否包含某整數(shù)

    這篇文章主要介紹了在?Java?中檢查數(shù)組是否包含某整數(shù),在本文中,我們使用了幾個內(nèi)置的方法,如anyMatch()、contains()、binarySearch()等,我們將在給定的數(shù)組中找到一個值,結(jié)合示例代碼給大家介紹的非常詳細,需要的朋友可以參考下
    2023-05-05

最新評論