使用org.owasp dependency-check-maven依赖库进行安全检查的时候发现springboot 、swagger的版本太低,所以需要升级组件。
升级过程、升级过程中遇到的错误及解决方法如下:
把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/");
}
}
同时也升级了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 这两个静态资源路径(见第一步)。否则还是报找不到静态资源的问题。