springboot整合swagger3和swagger-ui-layer

云卓
2023-12-01

springboot整合swagger3和swagger-ui-layer

1.引入jar包

        <!--swagger-->
        <dependency>
            <groupId>io.springfox</groupId>
            <artifactId>springfox-boot-starter</artifactId>
            <version>3.0.0</version>
        </dependency>
        <dependency>
            <!--swagger换皮肤-->
            <groupId>com.github.caspar-chen</groupId>
            <artifactId>swagger-ui-layer</artifactId>
            <version>1.1.3</version>
        </dependency>

2.在启动类上添加注解 并编写配置类

@EnableOpenApi

Swagger3Config.java

import io.swagger.annotations.ApiOperation;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import springfox.documentation.builders.ApiInfoBuilder;
import springfox.documentation.builders.PathSelectors;
import springfox.documentation.builders.RequestHandlerSelectors;
import springfox.documentation.service.ApiInfo;
import springfox.documentation.service.Contact;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spring.web.plugins.Docket;

/**
 * @author lzj
 * @date 2021/8/27
 */
@Configuration
public class Swagger3Config {
    @Bean
    public Docket createRestApi() {
        return new Docket(DocumentationType.OAS_30)
                .apiInfo(apiInfo())
                .select()
                .apis(RequestHandlerSelectors.withMethodAnnotation(ApiOperation.class))
                .apis(RequestHandlerSelectors.basePackage("包路径.controller"))
                .paths(PathSelectors.any())
                .build();
    }

    private ApiInfo apiInfo() {
        return new ApiInfoBuilder() .title("标题名")
                .description("描述")
                .contact(new Contact("作者名", "", ""))
                .version("1.0")
                .build();
    }
}

3.使用注解写文档

controller中的

加在类上的描述信息

@Api(tags = "信息", description = "描述", value = "信息")

加在方法上的描述信息

	// 生成方法的含义
    @ApiOperation(value = "", notes = "")
    //参数的含义
    @ApiImplicitParam(name = "id",value = "用户的id",paramType = "",dataType = "Integer")
    //返回值的含义
    @ApiResponse(code = 200,message = "成功")

实体类上

可以对实体类进行相关描述

@ApiModel("用户表")
public class User {
    /**
     * 用户id
     */
    @ApiModelProperty(value = "用户id")
    private Integer id;
}

4.访问地址

swagger3的访问地址:127.0.0.1:8080/swagger-ui/index.html

swagger-ui-layer访问地址: 127.0.0.1:8080/docs.html

5.注意总结

5.1 swagger3的地址和其他的不一样,网上好多以前的地址,建议查看官网指定版本
5.2 docs.html无法访问的问题

如果我们修改了springboot项目的静态路径的位置,会出现访问404的问题

  mvc:
    static-path-pattern: /static/**

我这里将静态路径访问的位置改成了static,我访问docs.html就404了

访问static/docs.html就一直转圈 , 无法获取 /static/v2/api-docs的数据

所以想要使用这个换皮肤的swagger不能更改那个静态资源路径

但是我要访问static下的文件通过 /static/xxx.js 之类的

因为我集成了shiro需要全部放行静态资源 /static/**下的所有路径

而默认springboot是将static下的文件直接放到根路径下可以访问

所以我就无法通过static/xxx.js访问,springboot会转换成/xxx.js

然后就被拦住了

解决方法

1 .上面的配置,但是无法使用swagger-ui-layer了

2.配置一个资源路径映射就可以了

    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        //将所有/static/** 访问都映射到classpath:/static/ 目录下
        registry.addResourceHandler("/static/**").addResourceLocations("classpath:/static/");
    }
 类似资料: