springboot集成swagger3.0

springboot集成swagger3.0

不同swagger版本访问路径

swagger版本 访问路径
3.0.0之前 http://127.0.0.1:8080/swagger-ui.html
3.0.0之后 http://127.0.0.1:8080/swagger-ui/index.html

swagger不同版本启动类配置注解

swagger版本 启动类配置注解
3.0.0之前 @EnableSwagger2
3.0.0之后 @EnableOpenApi

引入依赖

        <dependency>
            <groupId>io.springfox</groupId>
            <artifactId>springfox-boot-starter</artifactId>
            <version>3.0.0</version>
        </dependency>

yml配置

启动时如果出现以下报错Failed to start bean ‘documentationPluginsBootstrapper’; nested exception is java.lang.NullPointerException,需要在yml添加如下配置

spring:
  mvc:
    path-match:
      matching-strategy: ant_path_matcher

swagger配置类

swagger2.0和3.0指定的DocumentationType是不同的,2.0是SWAGGER_2,3.0是OAS_30;
Spring Boot 6.x 与Swagger 3.0.0 不兼容问题,会出现报错Failed to start bean ‘documentationPluginsBootstrapper’; nested exception is java.lang.NullPointerException,解决该问题方案如下:

@Configuration
public class SwaggerConfig {

    //访问http://127.0.0.1:1003/swagger-ui/index.html可以看到API文档
    @Bean
    public Docket api() {
        return new Docket(DocumentationType.OAS_30)
                .apiInfo(apiInfo())
                .select()
                .apis(RequestHandlerSelectors.any())
                .paths(PathSelectors.any())
                .build();
    }

    private ApiInfo apiInfo() {
        return new ApiInfoBuilder()
                .title("test")
                .description("test模块")
                .version("1.0")
                .license("转载请保留原文作者@Maruko")
                .licenseUrl("https://blog.csdn.net/qq_35705176/article/details/127994334?spm=1001.2014.3001.5502")
                .termsOfServiceUrl("")
                .build();
    }

    /**
     * 增加如下配置可解决Spring Boot 6.x 与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);
    }
    private boolean shouldRegisterLinksMapping(WebEndpointProperties webEndpointProperties, Environment environment, String basePath) {
        return webEndpointProperties.getDiscovery().isEnabled() && (StringUtils.hasText(basePath) || ManagementPortType.get(environment).equals(ManagementPortType.DIFFERENT));
    }

}

碰到问题

在集成swagger3.0时,碰到一个问题,Request body参数示例为空,后面发现是因为添加了懒加载的原因,需要去掉该配置

spring:
  application:
    name: producer-develop
#  main:
#    lazy-initialization: true

你可能感兴趣的:(java,swagger,spring,boot,java)