package com.example.swaggerdemo.config;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.actuate.autoconfigure.endpoint.web.CorsEndpointProperties;
import org.springframework.boot.actuate.autoconfigure.endpoint.web.WebEndpointProperties;
import org.springframework.boot.actuate.autoconfigure.web.server.ManagementPortType;
import org.springframework.boot.actuate.endpoint.ExposableEndpoint;
import org.springframework.boot.actuate.endpoint.web.*;
import org.springframework.boot.actuate.endpoint.web.annotation.ControllerEndpointsSupplier;
import org.springframework.boot.actuate.endpoint.web.annotation.ServletEndpointsSupplier;
import org.springframework.boot.actuate.endpoint.web.servlet.WebMvcEndpointHandlerMapping;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.env.Environment;
import org.springframework.util.StringUtils;
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.Contact;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spring.web.plugins.Docket;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
/**
* @Author yrz
* @create 2023/7/17 10:59
* @Description TODO
*/
/**
* 在早期版本的Swagger中,常常要求将@EnableSwagger2注解放置在Spring Boot应用的启动类上。但是,从Swagger 3.0开始,其对注解的使用进行了一些调整。
* 对于Swagger 3.0及更高版本,我们需要使用其他注解来启用Swagger API文档框架。具体而言,我们可以使用以下注解之一:
* - @EnableSwagger2WebMvc:如果我们使用Spring MVC作为Web框架,则可以将此注解放置在配置类上,来启用Swagger。
* - @EnableSwagger2WebFlux:如果我们使用Spring WebFlux作为Web框架,则可以将此注解放置在配置类上,来启用Swagger。
* - @EnableOpenApi:这是Swagger 3.0引入的新注解,可以用于Spring Boot应用中启用Swagger。它可以用于既支持Spring MVC,也支持Spring WebFlux的应用。
* 因此,根据你的具体情况,你可以选择适当的注解来启用Swagger API文档框架,并将其放置在合适的配置类上。
*/
@EnableOpenApi
@Configuration
public class SwaggerConfig {
@Value("${base.url}")
private String contextPath;
@Bean
public CustomSwaggerUiConfig swaggerUiConfig() {
return new CustomSwaggerUiConfig(contextPath);
}
@Bean
public Docket createRestApi() {
/**
* 在Swagger中,Docket是Swagger的主要配置类,它用于初始化和配置Swagger的核心功能。在Docket初始化时,
* 可以设置DocumentationType值来指定生成的API文档的类型和格式。
* DocumentationType是一个枚举类型,它定义了几种不同的API文档标准。常见的DocumentationType值及其含义如下:
* 1. SWAGGER_2:表示使用Swagger 2规范(旧版Swagger)生成API文档。这是Swagger默认的文档类型,生成的文档将符合Swagger 2的规范。
* 2. OPENAPI_3_0_0:表示使用OpenAPI 3规范(Swagger的最新规范)生成API文档。OpenAPI是Swagger 3版本开始使用的新规范,具有更多功能和灵活性。
* 一般来说,如果使用较新版本的Swagger(3.0及以上),建议使用OPENAPI_3_0_0作为DocumentationType的值。如果使用早期版本的Swagger(2.0),则使用SWAGGER_2。
* 通过设置DocumentationType的值,我们可以确保生成的API文档符合相应的规范,以便开发者更好地理解和使用API。
*/
return new Docket(DocumentationType.OAS_30)
.apiInfo(apiInfo())
.select()
.apis(RequestHandlerSelectors.withMethodAnnotation(ApiOperation.class))
.paths(PathSelectors.any())
.build();
}
/**
* ApiInfo类是Swagger API文档框架中的一个辅助类,用于提供API文档的基本信息,包括标题、描述、版本号、许可证等。
* ApiInfo类的作用是为API文档提供更详细的介绍和说明。通过配置ApiInfo,我们可以在生成的API文档中添加以下信息:
* 1. 标题(Title):用于标识API文档的名称或标题。
* 2. 描述(Description):对API文档的简要描述,可以说明API的功能、用途、使用方式等。
* 3. 版本(Version):API文档的版本号,用于标识API的不同版本。
* 4. 许可证(License):API文档所属的许可证类型,可以指明API的开放程度、使用限制等。
* 5. 作者信息(Contact):关于API的作者或维护者的联系信息,如姓名、电子邮件等。
* 6. 参考链接(Terms of service URL):提供一条指向API相关信息或条款的链接。
* 通过配置ApiInfo类,我们可以向API文档添加更多详细信息,方便开发者理解和使用API。这些信息将在Swagger的可视化界面中显示,并提供给开发者参考和查阅。
* @return
*/
private ApiInfo apiInfo() {
return new ApiInfoBuilder()
.title("Swagger接口文档")
.description("如有疑问,请联系开发工程师")
.contact(new Contact("yrz", "", "yrz@qq.com.cn"))
.version("1.0")
.build();
}
/**
* 增加如下配置可解决Spring Boot与Swagger 3.0.0 不兼容问题
**/
@Bean
public WebMvcEndpointHandlerMapping webEndpointServletHandlerMapping(WebEndpointsSupplier webEndpointsSupplier, ServletEndpointsSupplier servletEndpointsSupplier, ControllerEndpointsSupplier controllerEndpointsSupplier, EndpointMediaTypes endpointMediaTypes, CorsEndpointProperties corsProperties, WebEndpointProperties webEndpointProperties, Environment environment) {
List<ExposableEndpoint<?>> allEndpoints = new ArrayList();
Collection<ExposableWebEndpoint> webEndpoints = webEndpointsSupplier.getEndpoints();
allEndpoints.addAll(webEndpoints);
allEndpoints.addAll(servletEndpointsSupplier.getEndpoints());
allEndpoints.addAll(controllerEndpointsSupplier.getEndpoints());
String basePath = webEndpointProperties.getBasePath();
EndpointMapping endpointMapping = new EndpointMapping(basePath);
boolean shouldRegisterLinksMapping = this.shouldRegisterLinksMapping(webEndpointProperties, environment, basePath);
return new WebMvcEndpointHandlerMapping(endpointMapping, webEndpoints, endpointMediaTypes, corsProperties.toCorsConfiguration(), new EndpointLinksResolver(allEndpoints, basePath), shouldRegisterLinksMapping, null);
}
private boolean shouldRegisterLinksMapping(WebEndpointProperties webEndpointProperties, Environment environment, String basePath) {
return webEndpointProperties.getDiscovery().isEnabled() && (StringUtils.hasText(basePath) || ManagementPortType.get(environment).equals(ManagementPortType.DIFFERENT));
}
}
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
该demo演示了Spring Boot 2.6.15与Swagger 3.0.0的集成,并解决了集成中遇到的Failed to start bean 'documentationPluginsBootstrapper'; nested exception is java.lang.NullPointerException问题,如果你在项目中需要集成Swagger,可以直接采用该demo。
资源推荐
资源详情
资源评论
收起资源包目录
SpringBoot集成Swagger (114个子文件)
SwaggerConfig.class 7KB
CustomSwaggerUiConfig.class 1KB
SwaggerController.class 924B
SwaggerDemoApplication.class 738B
SwaggerDemoApplicationTests.class 566B
mvnw.cmd 7KB
.gitignore 395B
swagger-demo.iml 11KB
maven-wrapper.jar 59KB
SwaggerConfig.java 7KB
SwaggerController.java 742B
CustomSwaggerUiConfig.java 705B
SwaggerDemoApplication.java 338B
SwaggerDemoApplicationTests.java 229B
HELP.md 875B
mvnw 10KB
maven-wrapper.properties 1019B
application.properties 75B
application.properties 75B
workspace.xml 66KB
uiDesigner.xml 9KB
pom.xml 2KB
Maven__org_springframework_boot_spring_boot_actuator_autoconfigure_2_6_15.xml 814B
Maven__com_fasterxml_jackson_module_jackson_module_parameter_names_2_13_5.xml 802B
Maven__org_springframework_plugin_spring_plugin_metadata_2_0_0_RELEASE.xml 787B
Maven__org_springframework_boot_spring_boot_test_autoconfigure_2_6_15.xml 786B
Maven__org_springframework_boot_spring_boot_starter_actuator_2_6_15.xml 772B
Maven__com_vaadin_external_google_android_json_0_0_20131108_vaadin1.xml 766B
Maven__org_springframework_boot_spring_boot_starter_logging_2_6_15.xml 765B
Maven__com_fasterxml_jackson_datatype_jackson_datatype_jsr310_2_13_5.xml 761B
Maven__org_springframework_plugin_spring_plugin_core_2_0_0_RELEASE.xml 759B
Maven__org_springframework_boot_spring_boot_starter_tomcat_2_6_15.xml 758B
Maven__org_springframework_boot_spring_boot_autoconfigure_2_6_15.xml 751B
Maven__com_fasterxml_jackson_datatype_jackson_datatype_jdk8_2_13_5.xml 747B
Maven__org_springframework_boot_spring_boot_starter_test_2_6_15.xml 744B
Maven__org_springframework_boot_spring_boot_starter_json_2_6_15.xml 744B
Maven__org_springframework_boot_spring_boot_starter_web_2_6_15.xml 737B
Maven__org_apache_tomcat_embed_tomcat_embed_websocket_9_0_75.xml 726B
Maven__com_fasterxml_jackson_core_jackson_annotations_2_13_5.xml 717B
Maven__org_springframework_boot_spring_boot_actuator_2_6_15.xml 716B
Maven__org_springframework_boot_spring_boot_starter_2_6_15.xml 709B
Maven__org_junit_platform_junit_platform_commons_1_8_2.xml 699B
Maven__jakarta_activation_jakarta_activation_api_1_2_2.xml 699B
Maven__jakarta_annotation_jakarta_annotation_api_1_3_5.xml 699B
Maven__io_springfox_springfox_bean_validators_3_0_0.xml 696B
Maven__com_fasterxml_jackson_core_jackson_databind_2_13_5.xml 696B
Maven__org_junit_platform_junit_platform_engine_1_8_2.xml 692B
Maven__org_apache_tomcat_embed_tomcat_embed_core_9_0_75.xml 691B
Maven__io_springfox_springfox_spring_webflux_3_0_0.xml 689B
Maven__io_springfox_springfox_swagger_common_3_0_0.xml 689B
Maven__org_springframework_boot_spring_boot_test_2_6_15.xml 688B
Maven__io_springfox_springfox_spring_webmvc_3_0_0.xml 682B
Maven__org_junit_jupiter_junit_jupiter_params_5_8_2.xml 681B
Maven__org_junit_jupiter_junit_jupiter_engine_5_8_2.xml 681B
Maven__io_swagger_core_v3_swagger_annotations_2_1_2.xml 678B
Maven__jakarta_xml_bind_jakarta_xml_bind_api_2_3_3.xml 677B
Maven__org_apache_tomcat_embed_tomcat_embed_el_9_0_75.xml 677B
Maven__org_springframework_spring_expression_5_3_27.xml 675B
Maven__io_springfox_springfox_boot_starter_3_0_0.xml 675B
Maven__org_apache_logging_log4j_log4j_to_slf4j_2_17_2.xml 674B
Maven__com_fasterxml_jackson_core_jackson_core_2_13_5.xml 668B
Maven__org_mockito_mockito_junit_jupiter_4_0_0.xml 664B
Maven__io_springfox_springfox_spring_web_3_0_0.xml 661B
Maven__io_springfox_springfox_swagger_ui_3_0_0.xml 661B
Maven__org_junit_jupiter_junit_jupiter_api_5_8_2.xml 660B
Maven__io_springfox_springfox_data_rest_3_0_0.xml 654B
Maven__org_springframework_spring_context_5_3_27.xml 654B
Maven__io_swagger_swagger_annotations_1_5_20.xml 653B
Maven__org_springframework_boot_spring_boot_2_6_15.xml 653B
Maven__net_bytebuddy_byte_buddy_agent_1_11_22.xml 651B
compiler.xml 651B
Maven__org_springframework_spring_webmvc_5_3_27.xml 647B
Maven__io_springfox_springfox_swagger2_3_0_0.xml 647B
Maven__io_swagger_core_v3_swagger_models_2_1_2.xml 643B
Maven__ch_qos_logback_logback_classic_1_2_12.xml 641B
Maven__org_springframework_spring_beans_5_3_27.xml 640B
Maven__org_apache_logging_log4j_log4j_api_2_17_2.xml 639B
Maven__org_apiguardian_apiguardian_api_1_1_2.xml 638B
Maven__io_micrometer_micrometer_core_1_8_13.xml 637B
Maven__io_springfox_springfox_schema_3_0_0.xml 633B
Maven__org_springframework_spring_test_5_3_27.xml 633B
Maven__org_springframework_spring_core_5_3_27.xml 633B
Maven__org_junit_jupiter_junit_jupiter_5_8_2.xml 632B
Maven__org_mapstruct_mapstruct_1_3_1_Final.xml 630B
Maven__io_github_classgraph_classgraph_4_8_83.xml 630B
Maven__org_hdrhistogram_HdrHistogram_2_1_12.xml 628B
Maven__org_springframework_spring_aop_5_3_27.xml 626B
Maven__org_springframework_spring_web_5_3_27.xml 626B
Maven__org_springframework_spring_jcl_5_3_27.xml 626B
Maven__net_minidev_accessors_smart_2_4_9.xml 622B
Maven__org_latencyutils_LatencyUtils_2_0_3.xml 621B
Maven__ch_qos_logback_logback_core_1_2_12.xml 620B
Maven__io_springfox_springfox_core_3_0_0.xml 619B
Maven__io_swagger_swagger_models_1_5_20.xml 618B
Maven__io_springfox_springfox_oas_3_0_0.xml 612B
Maven__com_jayway_jsonpath_json_path_2_6_0.xml 612B
Maven__io_springfox_springfox_spi_3_0_0.xml 612B
Maven__net_bytebuddy_byte_buddy_1_11_22.xml 609B
Maven__org_assertj_assertj_core_3_21_0.xml 608B
Maven__org_skyscreamer_jsonassert_1_5_1.xml 603B
共 114 条
- 1
- 2
资源评论
倔强的初学者
- 粉丝: 1114
- 资源: 1
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 使用 C 语言实现的计算非负整数的阶乘
- 2011-2021最新版本北京大学数字普惠金融指数(PKU-DFIIC).xlsx
- 县域数字乡村指数2018-2020(1).xlsx
- Docker容器配置进阶
- tensorflow-gpu-2.7.4-cp37-cp37m-manylinux2010-x86-64.whl
- 多段线、 圆、弧转多段线(仅我可见)
- tensorflow-2.7.2-cp38-cp38-manylinux2010-x86-64.whl
- 李慧琴C语言基础部分.zip
- yeyue-p8Yi4-ve4a83792.apk
- tensorflow-gpu-2.7.3-cp38-cp38-manylinux2010-x86-64.whl
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功