Springboot从2.1.4升级到2.7.2后,访问静态资源,提示 page not found

使用org.owasp dependency-check-maven依赖库进行安全检查的时候发现springboot 、swagger的版本太低,所以需要升级组件。

升级过程、升级过程中遇到的错误及解决方法如下:

1. SpringBoot 升级:

把Springboot从2.1.4升级到2.7.2稳定版,升级完成后重启服务,在访问html、css、js等静态资源的时候,提示Page not found 。

直接访问前端html页面提示404,  访问swagger2.1.7也是报404错误,但是接口访问正常。

解决方法如下,新建实现WebMvcConfigurer 接口的子类,增加静态资源路径。

@Configuration
public class StaticResourceConfigurer implements WebMvcConfigurer {
    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        // 解决静态资源无法访问的问题
        registry.addResourceHandler("/**").addResourceLocations("classpath:/static/");   
        // 解决升级swagger3.0.3后,swagger无法访问的问题
        registry.addResourceHandler("/doc.html").addResourceLocations("classpath:/META-INF/resources/");
        registry.addResourceHandler("/webjars/**").addResourceLocations("classpath:/META-INF/resources/webjars/");
    }
}

 


 

2. Swagger 升级:

同时也升级了swagger的版本,在查看 Knife4j 的官网说明时,发现Knife4j的新版本已经内置了Springfox。

所以可以把 springfox-swagger2、springfox-swagger-ui库删除掉,只需引用Knife4j库即可。

友情提示

1、目前已经发行的Knife4j版本,Knife4j本身已经引入了springfox,开发者在使用时不用再单独引入Springfox的具体版本,否额会导致版本冲突。另外在网关层聚合(例如gateway)时,必须禁用Knife4j的增强模式

引入Knife4j库如下:

 <!--swagger接口文档页面 Knife4j本身已经引入了springfox -->
<!--如果开发者使用OpenAPI3的结构,底层框架依赖springfox3.0.0,可以考虑Knife4j的3.x版本-->
<dependency>
    <groupId>com.github.xiaoymin</groupId>
    <artifactId>knife4j-spring-boot-starter</artifactId>
    <version>3.0.3</version>
</dependency>

同时还需要在swagger配置类上添加@EnableWebMvc注解,如下:

@Configuration
@EnableSwagger2
@EnableWebMvc
public class ApiSwaggerConfig {
     // ignore
}

否则swagger 会报 Failed to start bean 'documentationPluginsBootstrapper'; nested exception is java.lang.NullPointerException 的错误。

另外还需要在WebMvcConfigurer 添加swagger的webjars 和doc.html 这两个静态资源路径(见第一步)。否则还是报找不到静态资源的问题。

评论列表: