• springboot集成swagger3+解决页面无法访问问题


    引入依赖

    pom文件引入swagger3依赖

            <dependency>
                <groupId>io.springfoxgroupId>
                <artifactId>springfox-boot-starterartifactId>
                <version>3.0.0version>
            dependency>
    
    • 1
    • 2
    • 3
    • 4
    • 5

    配置启动文件

    swagger使用ant_pattern_parser解析路径,但是spring boot在2.6之后(好现实2.6),修改为了path_pattern_parser。所以为了能使swagger正常使用,需要配置如下

    spring:
      mvc:
        pathmatch:
          matching-strategy: ant_path_matcher
    
    • 1
    • 2
    • 3
    • 4

    否则会报错
    Failed to start bean ‘documentationPluginsBootstrapper’; nested exception is java.lang.NullPointerException
    在这里插入图片描述

    程序启动swagger

    为了代码优雅,把swagger3启动注解写在了配置类
    @EnableOpenApi 注解一定要写,可以写在启动类 也可有写在配置类

    @EnableOpenApi
    @Configuration
    public class SwaggerConfig {
        /**
         * 用于读取配置文件中 swagger 属性是否开启
         */
        @Value("${swagger.enabled}")
        Boolean swaggerEnabled;
    
        @Bean
        public Docket createRestApi() {
            return new Docket(DocumentationType.OAS_30)
                    .apiInfo(apiInfo())
                    .enable(swaggerEnabled)
                    .select()
                    .paths(PathSelectors.any())
                    .build();
    
        }
        private ApiInfo apiInfo() {
            return new ApiInfoBuilder()
                    .title("FH Admin Swagger3 RESTful API") 	// 页面标题
                    .version("3.0")								// 版本号
                    .description("fhadmin.org")				    // 描述
                    .build();
        }
    
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28

    直接访问swagger

    Swagger UI的路径(网上一般是这个):http://localhost:8080/swagger-ui/index.html
    在这里插入图片描述

    解决swagger无法访问此页面

    在这里插入图片描述
    疑点1:swagger地址压根没有写对!!!
    不要直接根据网上给的http://localhost:8080/swagger-ui/index.html直接访问
    解决方案:
    正确链接拼接为:
    http://localhost:端口号/api/swagger-ui/index.html
    api是系统配置文件的默认前缀path,如没则忽略
    比如配置是

    server:
      servlet:
        context-path: /admin-api
      port: 8000
    
    • 1
    • 2
    • 3
    • 4

    那么swagger的访问地址是:
    http://localhost:8000/admin-api/swagger-ui/index.html

    疑点2 检查您的API是否允许跨域资源共享(CORS)。如果不允许,则Swagger UI无法从API获取资源。
    疑点3 在您的服务器上检查您的防火墙设置,以确保您的API端口没有被阻塞。
    疑点4 swagger地址被拦截,添加swagger拦截配置

    @Configuration
    public class WebMvcConfig implements WebMvcConfigurer {
        @Override
        public void addResourceHandlers(ResourceHandlerRegistry registry) {
            registry.addResourceHandler("/swagger-ui/**")
                    .addResourceLocations("classpath:/META-INF/resources/webjars/springfox-swagger-ui/")
                    .resourceChain(false);
        }
    
        @Override
        public void addViewControllers(ViewControllerRegistry registry) {
            registry.addViewController("/swagger-ui/")
                    .setViewName("forward:/swagger-ui/index.html");
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
  • 相关阅读:
    字符串基础面试题
    python07_函数
    使用 乐天 / V-IM 作为网页即时聊天
    在线商城系统软件、源码、报价_OctShop
    JavaScript 数组的函数 map/forEach/reduce/filter
    socket,tcp,http三者之间的原理和区别
    使用ComposeDesktop开发一款桌面端多功能APK工具
    什么东西可以替代触屏笔?Ipad触屏笔推荐品牌
    背景固定上面文字可以移动以及代码的复合写法(节约代码)
    VScode连接远程JupyterNotebook显示点云ply文件
  • 原文地址:https://blog.csdn.net/weixin_45460120/article/details/134424896