Spring Boot集成Swagger2

简介: 你好看官,里面请!今天笔者讲的是Spring Boot集成Swagger2。不懂或者觉得我写的有问题可以在评论区留言,我看到会及时回复。 注意:本文仅用于学习参考,不可用于商业用途,如需转载请跟我联系。

Spring Boot集成Swagger2

如果觉得写的还可以,点个赞支持一下笔者呗!你的点赞和关注会让我更快更新哦。笔者会持续更新关于Java和大数据有关的文章。目前集中精力在更新java框架的内容。

1. Swagger诞生

Java Web 从最开始的 JSP 到后来加入 Ajax 异步交互,再到现在的前后端分离,后端人员从一开始包揽 HTML、JS、Java 代码到现在更加聚焦于后端业务逻辑。随着开发模式的演变,前后端人员的分工越来越精细,联系也越来越松散,接口文档成了前后端配合的一道关键桥梁。最初,通常的做法是将接口文档写在公司内部的 WIKI 上(如 Confluence )。但这种做法的致命缺点就是接口文档几乎永远都会落后于实际代码实现。这让我们的开发工作不能顺畅的进行下去,于是我们今天的主角 Swagger 应运而生。

2. Swagger是什么

Swagger 是一款用于生成、描述、调用和可视化 RESTful 风格的 Web 服务接口文档的框架。其最大的特点莫过于可以使接口文档与代码实时同步。

3. 整合

要使用 Swagger ,首先我们需要添加 Swagger 对应的依赖:

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

接下来需要添加 Swagger 的基础配置:

@Configuration
@EnableSwagger2
public class SwaggerConfig {
    @Bean
    public Docket createRestApi() {
        return new Docket(DocumentationType.SWAGGER_2)
            .apiInfo(apiInfo()).select()
            .apis(RequestHandlerSelectors.withClassAnnotation(Api.class))
            .paths(PathSelectors.any())
            .build();
    }
    private ApiInfo apiInfo() {
        return new ApiInfoBuilder().title("Spring Boot实战")
            .description("Spring Boot实战的RESTFul接口文档说明")
            .version("1.0").build();
    }
}

简单说一下第 8 行代码:apis(RequestHandlerSelectors.withClassAnnotation(Api.class)) 。这行代码是告诉 Swagger 要扫描有 @Api 注解的类,可以将 Api.class 替换成 ApiOperation.class 扫描带有 @ApiOperation 注解的方法。当然还可以使用 basePackage() 方法配置 Swagger 需要扫描的包路径。

最后我们要完善一下之前的接口,加上一些 Swagger 的注解:

@Api
@RestController
public class HelloController {
    @ApiOperation("Hello Spring Boot 方法")
    @GetMapping("/")
    public String hello(@RequestParam(required = false) @ApiParam("名字") String name) {
        if (name != null && !"".equals(name)) {
            return "Hello " + name;
        }
        return "Hello Spring Boot";
    }
}

4. 效果

经过以上三个步骤,我们的 Swagger 就已经集成到我们的工程里了,现在启动工程,然后访问:http://localhost:8080/swagger-ui.html。 如果看到如下效果,就说明我们的 Swagger 已经配置成功。

网络异常,图片无法展示
|

Swagger 的页面分为两部分,最上面是接口的基本信息,如上图所示,包含了项目名称、描述等信息 :下面是每个接口的具体描述,如接口名字、参数名字、参数类型、是否必填等,还有返回的结果的示例。

将 Hello Spring Boot 方法展开可以看到该方法的详细描述:

网络异常,图片无法展示
|

我们可以看到,该方法有一个参数 name ,点击右上角的 Try it out 我们来测试一下:

网络异常,图片无法展示
|

在文本框内输入 IMOOC 点击下面的 Execute 按钮看一下调用结果:

网络异常,图片无法展示
|

我们看到接口返回状态码为 200 ,Response body 中打印出我们刚刚输入的值,OK 接口测试成功!

5. 常用注解

注解 作用域 说明
@Api 类 标识类为Swagger资源(Controller)
@ApiModel 类 描述接口实体类(通常为参数或返回值)
@ApiOperation 方法 用于描述接口方法
@ApiModelProperty 属性/方法 描述接口实体属性
@ApiParam 参数 描述接口参数

以上为我们最常用的五个注解。在上面的例子中,我们使用了 @Api@ApiOperation@ApiParam 三个注解,另外两个我们会在后面的学习中使用到。

6. 坑

在 Swagger 的使用过程中,你可能会遇到了一些 “坑”,在这里把出现频率比较高的坑分享出来,提前有个准备,免得到时候掉到坑里上不来。

6.1 接口404

现象

在 Swagger 页面调用接口(在 Try it out 中进行 Execute),返回 404,Request URL 中的地址中间莫名的多了一段路径:/v2/api-docs 例如:

http://localhost:8080/v2/api-docs/springboot/hello

原因

开始遇到这个问题的时候,百思不得其解,完全没有思路,网上寻找解决方案,根本找不到。升级版本、换浏览器、重启大法统统无效。最后,经过不懈努力与钻研(其实就是多看了浏览器地址栏一眼),发现原来是 Swagger 地址中端口号后面多了一个 / 。

解决方案

检查 Swagger 地址栏中是否多了一个 / ,去掉即可。

6.2 Unable to infer base url

现象

浏览器中打开 Swagger 的地址,弹出错误提示框,错误信息如下:

Unable to infer base url. This is common when using dynamic servlet registration or when the API is behind an API Gateway. The base url is the root of where all the swagger resources are served. For e.g. if the api is available at http://example.org/api/v2/api-docs then the base url is http://example.org/api/. Please enter the location manually:

原因

项目中有使用 @RestControllerAdvice 注解进行全局异常处理,导致 Swagger 失效。

解决方案

在全局异常处理类的 @RestControllerAdvice 注解中指定 Controller 的包名即可:

@RestControllerAdvice(basePackages = "com.imooc.springboot.controller")

6.3 采坑总结

在 Swagger 的使用中,如果遇到问题,可以安以下思路去排查:

如果你的 Swagger 地址为:

http://localhost:8080/swagger-ui.html

那么你先访问:

http://localhost:8080/v2/api-docs

看返回的结果是否类似下面的结构:

{
  "swagger": "2.0",
  "info": {
    "description": "Spring Boot实战的RESTFul接口文档说明",
    "version": "1.0",
    "title": "Spring Boot实战"
  },
  "host": "localhost:8080",
  "basePath": "/"
  ...
}

如果这个接口返回的数据格式不对,或者此接口无法访问,那么说明 Swagger 可能根本没有与 Spring Boot 集成到一起;如果是类似的结构,说明你的 Swagger 与 Spring Boot 已经成功集成,再去根据具体的错误提示去分析。

我们日常的工作学习中,会遇到各种各样、大大小小的坑。有些坑可以通过错误信息一步步找到原因并解决;而有些坑则无迹可循,只能凭着 “经验” 和运气摸着石头排错;有些坑更加复杂,一坑套一坑,可谓是大坑套小坑,小坑套老坑,坑中还有水,水中还有钉,下去就没影儿了。希望每个程序员在工作和学习中都能化坑为夷,一马平川。

相关文章
|
数据可视化 Java BI
将 Spring 微服务与 BI 工具集成:最佳实践
本文探讨了 Spring 微服务与商业智能(BI)工具集成的潜力与实践。随着微服务架构和数据分析需求的增长,Spring Boot 和 Spring Cloud 提供了构建可扩展、弹性服务的框架,而 BI 工具则增强了数据可视化与实时分析能力。文章介绍了 Spring 微服务的核心概念、BI 工具在企业中的作用,并深入分析了两者集成带来的优势,如实时数据处理、个性化报告、数据聚合与安全保障。同时,文中还总结了集成过程中的最佳实践,包括事件驱动架构、集中配置管理、数据安全控制、模块化设计与持续优化策略,旨在帮助企业构建高效、智能的数据驱动系统。
600 1
将 Spring 微服务与 BI 工具集成:最佳实践
|
XML 人工智能 Java
Spring Boot集成Aviator实现参数校验
Aviator是一个高性能、轻量级的Java表达式求值引擎,适用于动态表达式计算。其特点包括支持多种运算符、函数调用、正则匹配、自动类型转换及嵌套变量访问,性能优异且依赖小。适用于规则引擎、公式计算和动态脚本控制等场景。本文介绍了如何结合Aviator与AOP实现参数校验,并附有代码示例和仓库链接。
868 0
|
安全 Java 数据库
第16课:Spring Boot中集成 Shiro
第16课:Spring Boot中集成 Shiro
1292 0
|
消息中间件 存储 Java
第15课: Spring Boot中集成ActiveMQ
第15课: Spring Boot中集成ActiveMQ
835 0
|
Java 关系型数据库 数据库连接
Spring Boot项目集成MyBatis Plus操作PostgreSQL全解析
集成 Spring Boot、PostgreSQL 和 MyBatis Plus 的步骤与 MyBatis 类似,只不过在 MyBatis Plus 中提供了更多的便利功能,如自动生成 SQL、分页查询、Wrapper 查询等。
1257 2
|
监控 Cloud Native Java
Spring Integration 企业集成模式技术详解与实践指南
本文档全面介绍 Spring Integration 框架的核心概念、架构设计和实际应用。作为 Spring 生态系统中的企业集成解决方案,Spring Integration 基于著名的 Enterprise Integration Patterns(EIP)提供了轻量级的消息驱动架构。本文将深入探讨其消息通道、端点、过滤器、转换器等核心组件,以及如何构建可靠的企业集成解决方案。
1035 0
|
缓存 Java API
微服务——SpringBoot使用归纳——Spring Boot集成 Swagger2 展现在线接口文档——Swagger2 的配置
本文介绍了在Spring Boot中配置Swagger2的方法。通过创建一个配置类,添加`@Configuration`和`@EnableSwagger2`注解,使用Docket对象定义API文档的详细信息,包括标题、描述、版本和包路径等。配置完成后,访问`localhost:8080/swagger-ui.html`即可查看接口文档。文中还提示了可能因浏览器缓存导致的问题及解决方法。
1550 0
微服务——SpringBoot使用归纳——Spring Boot集成 Swagger2 展现在线接口文档——Swagger2 的配置
|
JSON Java API
微服务——SpringBoot使用归纳——Spring Boot集成 Swagger2 展现在线接口文档——Swagger2 的使用
本文详细介绍了Swagger2的使用方法,包括在Spring Boot项目中的配置与应用。重点讲解了Swagger2中常用的注解,如实体类上的`@ApiModel`和`@ApiModelProperty`,Controller类上的`@Api`、`@ApiOperation`以及参数上的`@ApiParam`等。通过示例代码展示了如何为实体类和接口添加注解,并在页面上生成在线接口文档,实现接口测试。最后总结了Swagger的优势及其在项目开发中的重要性,提供了课程源代码下载链接供学习参考。
1177 0
微服务——SpringBoot使用归纳——Spring Boot集成 Swagger2 展现在线接口文档——Swagger2 的使用
|
Java Maven 微服务
微服务——SpringBoot使用归纳——Spring Boot集成 Swagger2 展现在线接口文档——Swagger2 的 maven 依赖
在项目中使用Swagger2工具时,需导入Maven依赖。尽管官方最高版本为2.8.0,但其展示效果不够理想且稳定性欠佳。实际开发中常用2.2.2版本,因其稳定且界面友好。以下是围绕2.2.2版本的Maven依赖配置,包括`springfox-swagger2`和`springfox-swagger-ui`两个模块。
750 0