Knife4j文档请求异常/Type javax.servlet.http.HttpServletRequest not present----Springboot配置Swagger
1.问题描述
本次配置的Swagger是黑马教的同款,基本上是从黑马的代码里复制过来的,不过现在就有问题了,如果是我们新建的springboot项目,那版本很可能是3.x或更高的,而黑马写的swagger不适用3.x的(Swagger版本(springfox-swagger2)不兼容Spring Boot 3.x),只适用2.x的,所以这篇文章更适合springboot版本为3.x或更高的,我会帮助你们解决这个问题
(Knife4j文档请求异常:是直接配置黑马同款swagger会出现的报错,将会在doc.html页面进行报错
Type javax.servlet.http.HttpServletRequest not present:是添加了@EnableSwagger2或@EnableOpenApi注解后报错的,原因都是上面的原因,不兼容)
2.解决方法
这里先说解决方法,后面再说完整配置步骤,因为有的人的swagger有一样的报错但步骤不同
2.1降低springboot版本
如图,将spring-boot-starter-parent的版本号改为2.7.18,这个parent标签的完整代码如下:

<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.7.18</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
然后刷新pom,就是点右上角那个小m图标,加载完后那个图标会消失,等下一次pom被改变时重新出现
2.2降低Mybatis版本
如果有用到Mybatis,也要改他的版本,否则也无法也启动项目
刷新pom
到这里,如果你的swagger的pom写好了、配置写好了(在配置类里)、静态映射也好了,那就可以启动成功了,如果你的swagger还没配置好,接下来可以跟着我一起配置

3.配置Swagger
3.1写pom
写在<dependencies> </dependencies>标签内,也就是</dependencies>以上
<!-- swagger -->
<dependency>
<groupId>com.github.xiaoymin</groupId>
<artifactId>knife4j-spring-boot-starter</artifactId>
<version>3.0.3</version>
</dependency>

3.2配置swagger
配置在WebMvcConfiguration这个配置类里,记得继承WebMvcConfigurationSupport,这一部分代码和3.3的放一起

然后就是按需修改,主要改的就是这几个:
.title("苔花助残项目接口文档")
.version("1.0")
.description("苔花助残项目接口文档")
.apis(RequestHandlerSelectors.basePackage("com.dc1.controller"))
3.3静态资源映射
这部分也很重要,不过这是固定的,直接复制就行,不用改

接下来,我把3.2和3.3的代码(就是配置类)放一起,方便复制:
package com.dc1.config;
import lombok.extern.slf4j.Slf4j;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurationSupport;
import springfox.documentation.builders.ApiInfoBuilder;
import springfox.documentation.builders.PathSelectors;
import springfox.documentation.builders.RequestHandlerSelectors;
import springfox.documentation.service.ApiInfo;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spring.web.plugins.Docket;
@Configuration
@Slf4j
public class WebMvcConfiguration extends WebMvcConfigurationSupport {
/**
* 通过knife4j生成接口文档
* @return
*/
@Bean
public Docket docket() {
log.info("准备生成接口文档");
ApiInfo apiInfo = new ApiInfoBuilder()
.title("苔花助残项目接口文档")
.version("1.0")
.description("苔花助残项目接口文档")
.build();
Docket docket = new Docket(DocumentationType.SWAGGER_2)
.apiInfo(apiInfo)
.select()
.apis(RequestHandlerSelectors.basePackage("com.dc1.controller"))
.paths(PathSelectors.any())
.build();
return docket;
}
/**
* 设置静态资源映射
* @param registry
*/
protected void addResourceHandlers(ResourceHandlerRegistry registry) {
log.info("开始进行静态资源映射");
registry.addResourceHandler("/doc.html").addResourceLocations("classpath:/META-INF/resources/");
registry.addResourceHandler("/webjars/**").addResourceLocations("classpath:/META-INF/resources/webjars/");
}
}
然后大家按需修改即可,就能成功访问啦
更多推荐
所有评论(0)