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/");
        }
}

然后大家按需修改即可,就能成功访问啦

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐