侧边栏壁纸
  • 累计撰写 12 篇文章
  • 累计创建 11 个标签
  • 累计收到 2 条评论

目 录CONTENT

文章目录

SpringBoot集成Swagger文档

bingo
2021-11-17 / 0 评论 / 0 点赞 / 1,357 阅读 / 880 字 / 正在检测是否收录...
温馨提示:
本文最后更新于 2023-12-29,若内容或图片失效,请留言反馈。部分素材来自网络,若不小心影响到您的利益,请联系我们删除。

一、SpringBoot集成Swagger2.0

1. 添加依赖

<dependency>
    <groupId>io.springfox</groupId>
    <artifactId>springfox-swagger2</artifactId>
    <version>2.9.2</version>
</dependency>
<dependency>
    <groupId>io.springfox</groupId>
    <artifactId>springfox-swagger-ui</artifactId>
    <version>2.9.2</version>
</dependency>

2. 配置

创建SwaggerConfig配置类

@Configuration
public class Swagger2Config {

    @Bean
    public Docket createRestApi() {
        return new Docket(DocumentationType.SWAGGER_2)
             .apiInfo(apiInfo())
             .select()
             //为当前包路径,控制器类包
             .apis(RequestHandlerSelectors.basePackage("com.example.controller"))
            .paths(PathSelectors.any())
             .build();
    }

    //构建 api文档的详细信息函数
    private ApiInfo apiInfo() {
        return new ApiInfoBuilder()
            //页面标题
           .title("XX平台API接口文档")
            //创建人
           .contact(new Contact("example", "http://www.example.com",  
                 "example@example.com"))
           //版本号
          .version("1.0")
           //描述
          .description("系统API描述")
          .build();
    }

}

3. Controller类中配置

@Api("接口描述")
@RestController 
public class HelloController {
    
    @ApiOperation("请求方法描述")
    @GetMapping("{name}")
    public String hello(@PathVariable("name") @ApiParam("用户名") String name){
        return "hello," + name;
    }

}

4. 查看效果

访问:http://127.0.0.1:8080/swagger-ui.html即可。

二、SpringBoot集成Swagger3.0

1. 引入依赖springfox-boot-starter

<!-- 引入Swagger3依赖 -->
<dependency>
    <groupId>io.springfox</groupId>
    <artifactId>springfox-boot-starter</artifactId>
    <version>3.0.0</version>
</dependency>

2. 自定义配置信息

/**
* Swagger配置类
*/
@Configuration
@EnableOpenApi
public class SwaggerConfig {

    @Bean
    public Docket docket(){
       return new Docket(DocumentationType.OAS_30)
                .apiInfo(apiInfo()).enable(true)
                .select()
                //apis: 添加swagger接口提取范围
                .apis(RequestHandlerSelectors.basePackage("com.example"))
                //.apis(RequestHandlerSelectors.withMethodAnnotation(ApiOperation.class))
                .paths(PathSelectors.any())
                .build();
    }
    
    private ApiInfo apiInfo(){
        return new ApiInfoBuilder()
                .title("XX项目接口文档")
                .description("XX项目描述")
                .contact(new Contact("作者", "作者URL", "作者Email"))
                .version("1.0")
                .build();
    }

}

3. 在你的Controller上添加swagger注解

@Api(tags="用户管理")
@RestController
@RequestMapping("/user")
public class UserController {

    @ApiOperation("用户列表")
    @GetMapping("/{id}")
    public JsonResult getViewObjectMapping(@PathVariable("id") Long id) throws Exception{
        return super.getViewObject(id, UserVO.class);
    }

    ...

}

4. 如启用了访问权限,还需将swagger相关uri允许匿名访问

/swagger**/**
/webjars/**
/v3/**
/doc.html

5. 启动应用

访问: http://127.0.0.1:8080/swagger-ui/index.html

6.问题

启动时出现报错

An attempt was made to call a method that does not exist. The attempt was made from the following location:

    springfox.documentation.schema.plugins.SchemaPluginsManager.viewProvider(SchemaPluginsManager.java:95)

这是由于依赖冲突导致的,只需要手动排除低版本的依赖加入高版本

<!-- swagger3引入 -->
<dependency>
    <groupId>io.springfox</groupId>
    <artifactId>springfox-boot-starter</artifactId>
    <version>3.0.0</version>
    <exclusions>
        <exclusion>
            <groupId>org.springframework.plugin</groupId>
            <artifactId>spring-plugin-core</artifactId>
        </exclusion>
    </exclusions>
</dependency>
<dependency>
    <groupId>org.springframework.plugin</groupId>
    <artifactId>spring-plugin-core</artifactId>
    <version>2.0.0.RELEASE</version>
</dependency>

三、Swagger访问404问题

集成Swagger时遇到了404的问题,访问Swagger页面时出现404,找不到swagger-ui.html,需要手动指定一下静态资源路径,还有可能是权限拦截了,需要放行

@Configuration
@EnableWebMvc
public class MvcConfig implements WebMvcConfigurer {

    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        // 解决静态资源无法访问
        registry.addResourceHandler("/static/**").addResourceLocations("classpath:/static/");
        // 解决swagger无法访问
        registry.addResourceHandler("/swagger-ui.html").addResourceLocations("classpath:/META-INF/resources/");
        // 解决swagger的js文件无法访问
        registry.addResourceHandler("/webjars/**").addResourceLocations("classpath:/META-INF/resources/webjars/");
    }

}

参考文章: Springboot集成Swagger2及常见配置spring boot 集成 swagger 3.0 指南解决SpringBoot2.0集成Swagger2访问404的问题

0

评论区