@EnableWebMvc注解让swagger-ui.html无法打开404报错问题及其解决方案(史上最全最详细)

这篇具有很好参考价值的文章主要介绍了@EnableWebMvc注解让swagger-ui.html无法打开404报错问题及其解决方案(史上最全最详细)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

@EnableWebMvc注解让swagger-ui.html无法打开404报错问题及其解决方案(史上最全最详细)

一、出问题的经过及其原因

在工作中,通过Swagger2对项目的controller进行配置,以便于用户测试restful服务接口提高开发效率。

但是今天却出现了一个让我匪夷所思的问题就是在配置类里面加上@EnableWebMvc注解后(开启web配置支持)启动项目
@EnableWebMvc注解让swagger-ui.html无法打开404报错问题及其解决方案(史上最全最详细)
发现访问Swagger的ui界面404
@EnableWebMvc注解让swagger-ui.html无法打开404报错问题及其解决方案(史上最全最详细)

这个我就奇怪了,然后我尝试的把@EnableWebMvc注解放到启动类上
@EnableWebMvc注解让swagger-ui.html无法打开404报错问题及其解决方案(史上最全最详细)
发现Swagger-ui.html还是不能访问到报404错误,我记得@SpringBootApplication是默认开启自动配置webMvc的呀,那为什么会这样子呢,

通过查找资料发现@EnableWebMvc这个注解不建议直接配置到@Configuration上

@EnableWebMvc注解会全面接管SpringMVC,所有的SpringMVC的自动配置都失效了,通常不这么干。

查看@EnableWebMvc源码发现,是继承的WebMvcConfigurationSupport
@EnableWebMvc注解让swagger-ui.html无法打开404报错问题及其解决方案(史上最全最详细)

然后我去查了SpringBoot对MVC的自动配置WebMvcAutoConfiguration发现
@ConditionalOnMissingBean({WebMvcConfigurationSupport.class})
发现@EnableWebMvc加入之后会会取消SpringBoot的自动配置,自会提供最基础的功能
@EnableWebMvc注解让swagger-ui.html无法打开404报错问题及其解决方案(史上最全最详细)
这就是spring-boot的奥秘,不知不觉中犯错,你以为是这样的,其实你根本就不了解源码(原理)!

@EnableWebMvc开启后,意味着springmvc环境被你完全接管了(若不定义需要那些bean,确实啥都没有)。而WebMvcAutoConfiguration原本是自动装配的(注入一系列mvc的bean),影响它失效最重要的原因在于:@ConditionalOnMissingBean(WebMvcConfigurationSupport.class) ,是的,正是Condition发挥了的作用(Ioc容器中已经有了WebMvcConfigurationSupport,那WebMvcAutoConfiguration就不会再实例化注入)。

而WebMvcAutoConfiguration 原本是通过spring-boot-autoconfigure-2.0.5.RELEASE.jar/META-INF/spring.factories自动装配的。

总结:
后来才发现是@EnableWebMvc注解的问题,加了这个注解以后会导致静态资源路径无法访问。

所以根据总结不难发现,springboot对MVC的自动配置已经帮助我们配置了应用开发中大部分的功能,我们几乎不用去关闭修改,当然对Swagger的配置SpringBoot也帮助我们自动配置完成。

所以当我们取消SpringBoot自动配置的时候加上了@EnableWebMvc之后,就需要自己配置Swagger

二、解决方案

2.1 @EnableWebMvc注解必须去掉。

2.2 自定义配置类,实现WebMvcConfigurer接口,并添加如下代码


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

@EnableWebMvc注解让swagger-ui.html无法打开404报错问题及其解决方案(史上最全最详细)
或者如下
@EnableWebMvc注解让swagger-ui.html无法打开404报错问题及其解决方案(史上最全最详细)文章来源地址https://www.toymoban.com/news/detail-415914.html

package com.bjsxt.swagger.config;

import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;


public class MyWebMvcConfigurer2 implements WebMvcConfigurer {
    /**
     * 设置静态资源路径的映射
     */
    
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        // 解决静态资源无法访问
        registry.addResourceHandler("/**").addResourceLocations("classpath:/static/");
        // 解决swagger无法访问
        registry.addResourceHandler("/swagger-ui.html").addResourceLocations("classpath:/META-INF/resources/");
        // 解决swagger的js文件无法访问
        registry.addResourceHandler("/webjars/**").addResourceLocations("classpath:/META-INF/resources/webjars/");
    }

}

到了这里,关于@EnableWebMvc注解让swagger-ui.html无法打开404报错问题及其解决方案(史上最全最详细)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Springboot配置Swagger展示API文档并进行接口测试(doc.html、swagger-ui.html)

    三、创建一个测试接口 http://localhost:8080/doc.html http://localhost:8080/swagger-ui.html

    2024年02月10日
    浏览(41)
  • No mapping for GET /swagger-ui.html

    2022-7-23 springboot项目整合swagger2项目,在访问 swagger-ui.html 页面时候发生错误,如下: 控制台报错为: No mapping for GET /emos-wx-api/swagger-ui.html 解决办法:让swagger的配置类 SwaggerConfig 继承 WebMvcConfigurer 接口并且实现其中 addResourceHandlers 方法,如下: 再次访问 http://localhost:8080/项目

    2024年02月16日
    浏览(44)
  • 【JAVA swagger】解决No mapping for GET /swagger-ui.html报错

    完整代码在最后 一、报错 1.网页报错404 2.代码报错 No mapping for GET /swagger-ui.html 二、解决办法 1.版本回退 之前用的是swagger3.0.0和springboot3.0.6,始终没找到合适的解决办法,故将版本回退至swagger2.9.2和springboot2.7.11 2.Spring Boot 2.6.X后与Swagger有版本冲突问题,需要在application.prope

    2024年02月11日
    浏览(52)
  • swagger 3.0.0 集成 springboot 2.6+ 生成doc.html 和swagger-ui

    1.项目中引入pom.xml依赖 特别说明: doc.html模式 swagger-bootstrap-ui只支持Swagger 2 knife4j是swagger-bootstrap-ui的升级版,支持Swagger 3。 2.创建Swagger2Config配置类 3.启动类输出文档地址 项目运行后 控制台输出log见下图 点击任意文档链接都可以进入对应的文档

    2024年02月12日
    浏览(67)
  • localhost:8080/swagger-ui.html 访问不到 addResourceHandlers springmvc资源处理请求放行swagger

    无法访问swagger-ui.html 在swagger2.0+中可以用如下配置 解决办法:SpringMVC配置文件修改如下 关键是加入下面这一段 原因,为什么要这样? classpath:/META-INF/resources/ 映射到springfox-swagger-ui-2.9.2.jar!META-INFresources下的文件(包含了swagger-ui.html) classpath:/META-INF/resources/webjars/映射到s

    2024年02月15日
    浏览(49)
  • 【Python】Fastapi swagger-ui.css 、swagger-ui-bundle.js 无法加载,docs无法加载,redocs无法使用

    使用fastapi的时候,swagger-ui.css 、swagger-ui-bundle.js、redoc.standalone.js 有时候无法加载(国内环境原因或者是局域网屏蔽),此时就需要自己用魔法下载好对应文件,然后替换到fastapi里面去。 fastapi里面依靠这2个函数实现docs和redoc: fastapi里面官网给的解决办法: https://github.com

    2024年02月19日
    浏览(45)
  • 【SpringDoc】SpringBoot 3 swagger-ui.html 报404 SpringDoc 官方文档问题(可能)

    本文针对 SpringBoot 3.x 版本!! SpringDoc v2 官方文档:https://springdoc.org/v2/ 旧版本的 swagger 和 1.x 版本的SpringDoc 均不支持 SpringBoot 3,所以对于 SpringBoot3 如下的两种 Swagger 或 SpringDoc 依赖 均不可用 ,注意,是 不可用 无数的文章甚至 官方文档 都表示,swagger-ui 界面的网址是 htt

    2024年02月16日
    浏览(52)
  • 使用阿里druid关闭stat-view-servlet,和swagger-ui.html不可用

    一、问题描述 (1)druid 使用阿里druid的作为数据源的配置,还配置了stat-view-servlet,导致线上项目被扫描出未授权访问漏洞。简单来说就是druid/spring.html,这个页面可以直接访问,展示项目相关信息。 (2)swagger 使用swagger也是同样的问题,swagger在开发的时候方便的,但是上

    2024年02月11日
    浏览(36)
  • swagger-ui

    目录 一、swagger-ui简介 1.1 swagger-ui原理 1.2 swagger-ui特点 二、swagger-ui+springboot页面使用 2.1 swagger-ui的依赖 2.2 加入以上依赖要注意的点 2.3 工具类 3.4 swagger-ui 常用注解 @Api (修饰类) @ApiOperation(修饰方法) @ApiParam (接收参数) @ApiModel (修饰参数对象类) @ApiModelProperty(修饰参数对象

    2024年02月02日
    浏览(44)
  • 接口工具Swagger2和Swagger-UI的使用

    目录 一、为什么需要接口可视化工具? 二、Swagger-UI介绍: 1、在项目的pom文件中导入swagger2的依赖 2、下载Swagger-UI项目 3、引入Swagger-UI 4、编写配置文件 第一种: 第二种: 5、访问api文档页面 6、如果访问失败,则进行第六步,如果访问成功,就不用操作了。 我们的项目通常

    2024年02月08日
    浏览(53)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包