SpringBoot从0到实战8:简单使用Swagger生成接口开发文档

简介: Swagger 是一个规范和完整的框架,广泛用于生成、描述、调用和可视化 RESTful 风格的 Web服务。总体目标是使客户端和文件系统作为服务器以相同速度更新。文件的方法,参数和模型紧密集成到服务器端的代码,允许API来始终保持同步。通俗一点的来说,就是在项目中加入Swagger的相关配置,就可以生成项目全部接口文档方便前后端开发进行联动。

初识Swagger


Swagger 是一个规范和完整的框架,广泛用于生成、描述、调用和可视化 RESTful 风格的 Web服务。总体目标是使客户端和文件系统作为服务器以相同速度更新。文件的方法,参数和模型紧密集成到服务器端的代码,允许API来始终保持同步。通俗一点的来说,就是在项目中加入Swagger的相关配置,就可以生成项目全部接口文档方便前后端开发进行联动。

Swagger的作用


接口文档自动生成。

对接口进行功能测试。

Swagger的组成


Swagger-tools:提供各种与Swagger进行集成和交互的工具。例如模式检验、Swagger 文档转换成Swagger 2.0文档等功能。


Swagger-core: 用于Java/Scala的的Swagger实现。与JAX-RS(Jersey、Resteasy、CXF…)、Servlets和Play框架进行集成。


Swagger-js: 用于JavaScript的Swagger实现。


Swagger-node-express: Swagger模块,用于node.js的Express web应用框架。


Swagger-ui:一个无依赖的HTML、JS和CSS集合,可以为Swagger兼容API动态生成优雅文档。


Swagger-codegen:一个模板驱动引擎,通过分析用户Swagger资源声明以各种语言生成客户端代码。


如何使用Swagger生成文档


1、进行maven依赖配置

在pom.xml中引入swagger依赖

1d0d9d79cb313bb0845aebc4b50d0af1_watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl81MTQ4NDQ2MA==,size_16,color_FFFFFF,t_70.png


2、在application中引入swagger类

bbd73847bcea79cc178f330465d9bfec_watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl81MTQ4NDQ2MA==,size_16,color_FFFFFF,t_70.png


需要注意的是在apis中需要正确配置需要扫描的接口所在的包的路径即“com.example.demo.controller“”

3、添加swagger注解内容用于controller类上

0b143cdee47c3b32e0e163c8778096f3_watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl81MTQ4NDQ2MA==,size_16,color_FFFFFF,t_70.png


4、运行项目

贴上简单的代码截图

a6bdbcc35202bd6dfee110c976fc6534_watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl81MTQ4NDQ2MA==,size_16,color_FFFFFF,t_70.png


fe22b24aba8cb3c4f903e1976ab1dd5f_watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl81MTQ4NDQ2MA==,size_16,color_FFFFFF,t_70.png

8ed8da90becd154c770244f32280ec8c_watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl81MTQ4NDQ2MA==,size_16,color_FFFFFF,t_70.png

5、访问swagger-ui得到最终效果

31532f596e59ac832d377f0a2e477324_watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl81MTQ4NDQ2MA==,size_16,color_FFFFFF,t_70.png

swagger注解的说明


1、@Api:对请求类的说明

@Api:放在请求的类上,与 @Controller 并列
说明类的作用,如该类是用于用户模块、商家模块等。
{
  tags="说明该类的作用"
  value="该参数没什么意义,所以不需要配置"
}

d3d7d1c694fa4e75cb56f91a24308e51_watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl81MTQ4NDQ2MA==,size_16,color_FFFFFF,t_70.png


2、@ApiOperation:方法的说明

@ApiOperation:"用在请求的方法上,说明方法的作用"
{
  value="说明方法的作用"
  notes="方法的备注说明"
}


3、@ApilmplicitParams、@ApilmolicitParam:方法参数的说明

@ApiImplicitParams:用在请求的方法上 包含一组参数说明

@ApiImplicitParams:用在请求的方法上 包含一组参数说明
  @ApiImplicitParam:对单个参数的说明     
     name:参数名
     value:参数的说明、描述
     required:参数是否必须必填
     paramType:参数放在哪个地方
          · query --> 请求参数的获取:@RequestParam
          · header --> 请求参数的获取:@RequestHeader       
          · path(用于restful接口)--> 请求参数的获取:@PathVariable
            · body(请求体)-->  @RequestBody User user
          · form(普通表单提交)    
     dataType:参数类型,默认String,其它值dataType="Int" //注意这里不能填integer    
     defaultValue:参数的默认值

@ApilmplicitParams、@ApilmolicitParam:方法参数示例

@Api(tags="用户模块")
@Controller
public class UserController {
  @ApiOperation(value="用户登录",notes="随边说点啥")
  @ApiImplicitParams({
  @ApiImplicitParam(name="mobile",value="手机号",required=true,paramType="form"),
  @ApiImplicitParam(name="password",value="密码",required=true,paramType="form"),
  @ApiImplicitParam(name="age",value="年龄",required=true,paramType="form",dataType="Integer")
  })
  @PostMapping("/login")
  public JsonResult login(@RequestParam String mobile, @RequestParam String password,
  @RequestParam Integer age){
  //...
     return JsonResult.ok(map);
  }
}


4、@ApiResponses、@ApiResponse:方法返回值的状态码说明

@ApiResponses:方法返回对象的说明
@ApiResponse:每个参数的说明
   code:数字,例如400
   message:信息,例如"请求参数没填好"
   response:抛出异常的类


@ApiResponses、@ApiResponse:方法返回值的示例

@Api(tags="用户模块")
@Controller
public class UserController {
  @ApiOperation("获取用户信息")
  @ApiImplicitParams({
  @ApiImplicitParam(paramType="query", name="userId", dataType="String", required=true, value="用户Id")
  }) 
  @ApiResponses({
  @ApiResponse(code = 200, message = "请求成功"),
  @ApiResponse(code = 400, message = "请求参数没填好"),
  @ApiResponse(code = 404, message = "请求路径没有或页面跳转路径不对")
  }) 
  @ResponseBody
  @RequestMapping("/list")
  public JsonResult list(@RequestParam String userId) {
  ...
  return JsonResult.ok().put("page", pageUtil);
  }
}


5、@ApiModel:用于JavaBean上面,表示对JavaBean 的功能描述

@ApiModel的功能:


1、当请求数据描述,即 @RequestBody 时, 用于封装请求(包括数据的各种校验)数据;


2、当响应值是对象时,即 @ResponseBody 时,用于返回值对象的描述。


当请求数据描述时, @RequestBody 时的使用

@ApiModel(description = "用户登录")
public class UserLoginVO implements Serializable {
  private static final long serialVersionUID = 1L;
  @ApiModelProperty(value = "用户名",required=true)  
  private String username;
  @ApiModelProperty(value = "密码",required=true) 
  private String password;
  // getter/setter省略
}
@Api(tags="用户模块")
@Controller
public class UserController {
  @ApiOperation(value = "用户登录", notes = "") 
  @PostMapping(value = "/login")
  public R login(@RequestBody UserLoginVO userLoginVO) {
  User user=userSerivce.login(userLoginVO);
  return R.okData(user);
  }
}


2f2883d238b2d956d324b7dafa3a9d92_watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl81MTQ4NDQ2MA==,size_16,color_FFFFFF,t_70.png2f2883d238b2d956d324b7dafa3a9d92_watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl81MTQ4NDQ2MA==,size_16,color_FFFFFF,t_70.png2f2883d238b2d956d324b7dafa3a9d92_watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl81MTQ4NDQ2MA==,size_16,color_FFFFFF,t_70.png

2f2883d238b2d956d324b7dafa3a9d92_watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl81MTQ4NDQ2MA==,size_16,color_FFFFFF,t_70.png


@ApiModelProperty:用在JavaBean类的属性上面,说明属性的含义

@ApiModel(description= "返回响应数据")
public class RestMessage implements Serializable{
  @ApiModelProperty(value = "是否成功",required=true)
  private boolean success=true; 
  @ApiModelProperty(value = "错误码")
  private Integer errCode;
  @ApiModelProperty(value = "提示信息")
  private String message;
    @ApiModelProperty(value = "数据")
  private Object data;
  /* getter/setter 略*/
}


借鉴大佬的帖子:

https://blog.csdn.net/xiaojin21cen/article/details/78654652?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522162860182416780366580688%2522%252C%2522scm%2522%253A%252220140713.130102334…%2522%257D&request_id=162860182416780366580688&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2allsobaiduend~default-2-78654652.first_rank_v2_pc_rank_v29&utm_term=swagger%E6%B3%A8%E8%A7%A3&spm=1018.2226.3001.4187


相关文章
|
4月前
|
安全 NoSQL Java
SpringBoot接口安全:限流、重放攻击、签名机制分析
本文介绍如何在Spring Boot中实现API安全机制,涵盖签名验证、防重放攻击和限流三大核心。通过自定义注解与拦截器,结合Redis,构建轻量级、可扩展的安全防护方案,适用于B2B接口与系统集成。
697 3
|
7月前
|
算法 网络协议 Java
Spring Boot 的接口限流算法
本文介绍了高并发系统中流量控制的重要性及常见的限流算法。首先讲解了简单的计数器法,其通过设置时间窗口内的请求数限制来控制流量,但存在临界问题。接着介绍了滑动窗口算法,通过将时间窗口划分为多个格子,提高了统计精度并缓解了临界问题。随后详细描述了漏桶算法和令牌桶算法,前者以固定速率处理请求,后者允许一定程度的流量突发,更符合实际需求。最后对比了各算法的特点与适用场景,指出选择合适的算法需根据具体情况进行分析。
657 56
Spring Boot 的接口限流算法
|
9月前
|
存储 JSON API
如何将 Swagger 文档导出为 PDF 文件
你会发现自己可能需要将 Swagger 文档导出为 PDF 或文件,以便于共享和存档。在这篇博文中,我们将指导你完成将 Swagger 文档导出为 PDF 格式的过程。
|
10月前
|
JSON Java API
微服务——SpringBoot使用归纳——Spring Boot集成 Swagger2 展现在线接口文档——Swagger2 的使用
本文详细介绍了Swagger2的使用方法,包括在Spring Boot项目中的配置与应用。重点讲解了Swagger2中常用的注解,如实体类上的`@ApiModel`和`@ApiModelProperty`,Controller类上的`@Api`、`@ApiOperation`以及参数上的`@ApiParam`等。通过示例代码展示了如何为实体类和接口添加注解,并在页面上生成在线接口文档,实现接口测试。最后总结了Swagger的优势及其在项目开发中的重要性,提供了课程源代码下载链接供学习参考。
750 0
微服务——SpringBoot使用归纳——Spring Boot集成 Swagger2 展现在线接口文档——Swagger2 的使用
|
10月前
|
缓存 Java API
微服务——SpringBoot使用归纳——Spring Boot集成 Swagger2 展现在线接口文档——Swagger2 的配置
本文介绍了在Spring Boot中配置Swagger2的方法。通过创建一个配置类,添加`@Configuration`和`@EnableSwagger2`注解,使用Docket对象定义API文档的详细信息,包括标题、描述、版本和包路径等。配置完成后,访问`localhost:8080/swagger-ui.html`即可查看接口文档。文中还提示了可能因浏览器缓存导致的问题及解决方法。
1144 0
微服务——SpringBoot使用归纳——Spring Boot集成 Swagger2 展现在线接口文档——Swagger2 的配置
|
10月前
|
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`两个模块。
446 0
|
10月前
|
前端开发 Java API
微服务——SpringBoot使用归纳——Spring Boot集成 Swagger2 展现在线接口文档—— Swagger 简介
第6课介绍了在Spring Boot中集成Swagger2以展示在线接口文档的方法。随着前后端分离架构的发展,API文档成为连接前端与后端开发的重要纽带。然而,代码更新频繁导致文档难以同步维护,Swagger2解决了这一问题。通过Swagger,在线API文档不仅方便了接口调用方查看和测试,还支持开发者实时测试接口数据。本文使用Swagger 2.2.2版本,讲解如何在Spring Boot项目中导入并配置Swagger2工具,从而高效管理接口文档。
365 0
|
7月前
|
Java API 网络架构
基于 Spring Boot 框架开发 REST API 接口实践指南
本文详解基于Spring Boot 3.x构建REST API的完整开发流程,涵盖环境搭建、领域建模、响应式编程、安全控制、容器化部署及性能优化等关键环节,助力开发者打造高效稳定的后端服务。
1067 1
|
数据可视化 Java API
Spring Boot与Swagger的集成
Spring Boot与Swagger的集成
|
Java API 开发者
在Spring Boot中集成Swagger API文档
在Spring Boot中集成Swagger API文档