返回

致力于解决@EnableWebMvc注解导致swagger-ui.html 404报错问题,您不容错过的最佳指南

后端

解决@EnableWebMvc注解导致的Swagger-ui.html 404错误:终极指南

简介

在Spring MVC项目中使用Swagger时,开发者可能遇到一个常见的错误:当访问swagger-ui.html时,出现404错误。本文将深入探讨这一问题的根源,并提供两种全面的解决方案,帮助您轻松解决此问题。

错误的根源:

@EnableWebMvc注解

@EnableWebMvc是Spring MVC提供的注解,用于自动配置Spring MVC的Web应用程序上下文。它会创建DispatcherServlet和ViewResolver等必要组件,以便处理HTTP请求。然而,当同时使用Swagger时,它可能会导致404错误。

原因在于,@EnableWebMvc注解将Spring MVC的默认静态资源路径(如/webjars/swagger-ui/)映射到DispatcherServlet。而swagger-ui.html是一个静态资源文件,它不应该由DispatcherServlet处理。

解决方案 1:去掉@EnableWebMvc注解

一种直接的解决方案是去掉@EnableWebMvc注解。这会禁用Spring MVC的自动配置,让您手动配置Spring MVC的组件。

解决方案 2:自定义WebMvc配置类

一种更优雅的解决方案是创建一个自定义的WebMvc配置类,实现WebMvcConfigurer接口,并添加以下代码:

@Configuration
public class WebMvcConfig implements WebMvcConfigurer {

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

}

这段代码将swagger-ui.html映射到正确的静态资源路径,从而解决404错误。

结论

通过了解@EnableWebMvc注解导致404错误的根源和解决方案,您可以轻松地解决此问题,确保swagger-ui.html可以正常访问。本文提供了两种全面的解决方案,供您选择,以便根据项目的需要灵活地进行配置。

常见问题解答

  1. 我是否必须总是去掉@EnableWebMvc注解?

不,您可以使用自定义WebMvc配置类来解决问题,而不必去掉@EnableWebMvc注解。

  1. 如果我有多个静态资源路径,我该如何处理?

在addResourceHandlers方法中,您可以指定多个资源处理程序,每个处理程序负责映射一个或多个静态资源路径。

  1. 我可以将swagger-ui.html移动到不同的路径吗?

可以,在addResourceHandlers方法中,您可以将swagger-ui.html映射到您想要的任何路径。

  1. 除了404错误之外,还有其他原因会导致Swagger无法正常工作吗?

是的,其他可能的原因包括缺少依赖项、配置错误或版本冲突。

  1. 我找不到META-INF/resources文件夹,该怎么办?

META-INF/resources文件夹通常位于项目的主资源目录中,确保您已将swagger-ui依赖项添加到您的项目中。