Swagger2配置方式(解决404报错)

作者:三毛村滴雪鱼粉 时间:2022-08-30 17:21:13 

Swagger2配置(解决404报错)

在spring boot项目中配置Swagger2,配置好了但是访问确实404,SwaggerConfig中的注入方法也执行了还是访问不到页面。究其原因是MVC没有找到swagger-ui包中的swagger-ui.html文件。

Swagger2的配置步骤如下:

一、引入依赖

pom.wml


<dependency>
           <groupId>io.springfox</groupId>
           <artifactId>springfox-swagger2</artifactId>
           <version>2.9.2</version>
       </dependency>
       <dependency>
           <groupId>io.springfox</groupId>
           <artifactId>springfox-swagger-ui</artifactId>
           <version>2.9.2</version>
       </dependency>

二、编写配置文件


package io.github.talelin.latticy.config;
import com.google.common.base.Function;
import com.google.common.base.Optional;
import com.google.common.base.Predicate;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;
import springfox.documentation.RequestHandler;
import springfox.documentation.builders.ApiInfoBuilder;
import springfox.documentation.builders.PathSelectors;
import springfox.documentation.service.ApiInfo;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spring.web.plugins.Docket;
import springfox.documentation.swagger2.annotations.EnableSwagger2;
@Configuration
@EnableSwagger2
public class SwaggerConfig {
   // 定义分隔符
   private static final String splitor = ";";
   @Bean
   Docket docket() {
       System.out.println("Swagger===========================================");
       return new Docket(DocumentationType.SWAGGER_2)
               .apiInfo(apiInfo())
               .select()
               .apis(basePackage("io.github.talelin.latticy.controller.v1"))//这里采用包扫描的方式来确定要显示的接口
               // .apis(RequestHandlerSelectors.withMethodAnnotation(ApiOperation.class))                         //这里采用包含注解的方式来确定要显示的接口
               .paths(PathSelectors.any())
               .build();
   }
   private ApiInfo apiInfo() {
       return new ApiInfoBuilder()
               .title("CMS")
               .description("电商小程序 CMS Api文档")
               .termsOfServiceUrl("https://blog.csdn.net/xfx_1994")
               .version("1.0")
               .build();
   }
   public static Predicate <RequestHandler> basePackage(final String basePackage) {
       return input -> declaringClass(input).transform(handlerPackage(basePackage)).or(true);
   }
   private static Function <Class<?>, Boolean> handlerPackage(final String basePackage)     {
       return input -> {
           // 循环判断匹配
           for (String strPackage : basePackage.split(splitor)) {
               boolean isMatch = input.getPackage().getName().startsWith(strPackage);
               if (isMatch) {
                   return true;
               }
           }
           return false;
       };
   }
   private static Optional<? extends Class<?>> declaringClass(RequestHandler input) {
       return Optional.fromNullable(input.declaringClass());
   }
}

至此已经配置完成,启动项目访问 http://localhost: p o r t / {port}/ port/{context-path}/swagger-ui.html

如果访问成功则不需要继续下面的配置,如果访问失败出现404报错,则进行下面的配置

Swagger2配置方式(解决404报错)

三、解决404报错


package io.github.talelin.latticy.config;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
@Configuration
public class WebMvcConfig implements WebMvcConfigurer {
   @Override
   public void addResourceHandlers(ResourceHandlerRegistry registry) {
       registry.addResourceHandler("/**").addResourceLocations("classpath:/static/");
       registry.addResourceHandler("swagger-ui.html")
               .addResourceLocations("classpath:/META-INF/resources/");
       registry.addResourceHandler("/webjars/**")
               .addResourceLocations("classpath:/META-INF/resources/webjars/");
   }
}

原理就是帮助MVC找到 swagger-ui.html 及其 CSS,JS 对应的文件

swagger配置好后仍然404问题

记录一下 学习spring boot 遇到的问题

swagger2


@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
   registry.addResourceHandler("swagger-ui.html")
           .addResourceLocations("classpath:/META-INF/resources/");
   registry.addResourceHandler("/webjars/**")
           .addResourceLocations("classpath:/META-INF/resources/webjars/");
}

swagger 添加此配置之后仍然404

1.有可能是 有其他类 实现了 WebMvcConfigurer 或者 继承了 WebMvcConfigurationSupport

导致的WebMvcConfigurationSupport 在继承的时候 没有重写addResourceHandlers

2.spring boot 启动模式有三种 如果默认没有改动的话 应该是SERVLET

  • NONE

  • SERVLET

  • REACTIVE

注意查看 只有SERVLET 会加载webmvc配置

来源:https://blog.csdn.net/xfx_1994/article/details/106454363

标签:Swagger2,配置,404
0
投稿

猜你喜欢

  • SpringMVC @RequestBody的使用解析

    2022-01-30 06:34:32
  • Java动态显示文件上传进度实现代码

    2022-09-09 20:18:17
  • Java序列化和反序列化示例介绍

    2023-11-25 04:24:26
  • Spring Boot 实现配置文件加解密原理

    2023-11-23 17:48:46
  • 浅谈Java线程Thread之interrupt中断解析

    2023-07-19 09:25:11
  • Java 使用 HttpClient 发送 GET请求和 POST请求

    2023-07-23 07:56:13
  • iOS应用中使用Toolbar工具栏方式切换视图的方法详解

    2023-06-21 09:24:48
  • 使用Java8 Stream流的skip + limit实现批处理的方法

    2023-11-29 06:17:39
  • spring Boot打包部署到远程服务器的tomcat中

    2023-01-14 21:45:28
  • SpringDataElasticsearch与SpEL表达式实现ES动态索引

    2021-11-27 01:33:03
  • Java多线程yield心得分享

    2023-11-29 05:58:15
  • SpringBoot2使用Jetty容器操作(替换默认Tomcat)

    2023-11-24 01:17:15
  • Java并发编程之原子性-Atomic的使用

    2023-11-09 22:34:58
  • j2ee之AJAX二级联动效果

    2021-09-13 10:06:58
  • 解决SpringBoot框架因post数据量过大没反应问题(踩坑)

    2023-11-28 11:59:30
  • Java实现简单台球游戏

    2022-06-28 23:55:59
  • 详细解读JAVA多线程实现的三种方式

    2022-01-14 04:35:31
  • Java中PriorityQueue实现最小堆和最大堆的用法

    2022-03-25 14:32:18
  • MyBatis Log 插件无法显示SQL语句的原因解析

    2023-11-24 23:42:55
  • Java字节与字符流永久存储json数据

    2022-12-27 21:10:13
  • asp之家 软件编程 m.aspxhome.com