IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Java知识库 -> SpringBoot整合Swagger3.0 -> 正文阅读

[Java知识库]SpringBoot整合Swagger3.0

1. 简介
官网:https://swagger.io/

Swagger 是一个规范且完整的框架,用于生成、描述、调用和可视化 RESTful 风格的 Web 服务。

Swagger 的目标是对 REST API 定义一个标准且和语言无关的接口,可以让人和计算机拥有无须访问源码、文档或网络流量监测就可以发现和理解服务的能力。当通过 Swagger 进行正确定义,用户可以理解远程服务并使用最少实现逻辑与远程服务进行交互。与为底层编程所实现的接口类似,Swagger 消除了调用服务时可能会有的猜测。

Swagger 的优势

支持 API 自动生成同步的在线文档:使用 Swagger 后可以直接通过代码生成文档,不再需要自己手动编写接口文档了,对程序员来说非常方便,可以节约写文档的时间去学习新技术。
提供 Web 页面在线测试 API:光有文档还不够,Swagger 生成的文档还支持在线测试。参数和格式都定好了,直接在界面上输入参数对应的值即可在线测试接口。

2. 集成swagger
SpringBoot2.6.5 + Swagger3.0
(1)导入相关依赖
通过在项目中引入 Springfox,可以扫描相关的代码,生成该描述文件,进而生成与代码一致的接口文档和客户端代码。

<!-- swagger -->
<dependency>
    <groupId>io.springfox</groupId>
    <artifactId>springfox-spring-web</artifactId>
    <version>3.0.0</version>
</dependency>
<dependency>
    <groupId>io.springfox</groupId>
    <artifactId>springfox-boot-starter</artifactId>
    <version>3.0.0</version>
</dependency>

(2)编写配置文件
在这里插入图片描述
这个时候 Swagger 已经算是整合到项目之中了,可以启动下服务,
输入:http://localhost:8080/swagger-ui/index.html 即可查看 swagger 文档。

注意:如果是swagger3.0之前的版本,需要输入:http://localhost:8080/swagger-ui.html访问。

(3)配置config

/**
* 展示 controller 包下所有的接口
*/
@Bean
public Docket docket1() {
   // 创建一个 swagger 的 bean 实例
   return new Docket(DocumentationType.SWAGGER_2)
           .groupName("demo") // 修改组名为 "demo"
           // 配置接口信息
           .select() // 设置扫描接口
           // 配置如何扫描接口
           .apis(RequestHandlerSelectors
                   .withClassAnnotation(RestController.class)
           )
           .paths(PathSelectors
                   .any() // 满足条件的路径,该断言总为true
           )
           .build();
}
/**
* 展示路径为 /error 的所有接口(基础接口)
*/
@Bean
public Docket docket2() {
   // 设置请求头
   List<Parameter> parameters = new ArrayList<>();
   parameters.add(new ParameterBuilder()
           .name("token") // 字段名
           .description("token") // 描述
           .modelRef(new ModelRef("string")) // 数据类型
           .parameterType("header") // 参数类型
           .defaultValue("default value") // 默认值:可自己设置
           .hidden(true) // 是否隐藏
           .required(false) // 是否必须
           .build());
   // 创建一个 swagger 的 bean 实例
   return new Docket(DocumentationType.SWAGGER_2)
           .groupName("error") // 修改组名为 "yank"
           // 配置接口信息
           .select() // 设置扫描接口
           // 配置如何扫描接口
           .apis(RequestHandlerSelectors
                   .any() // 扫描全部的接口,默认
           )
           .paths(PathSelectors
                   .ant("/error") // 满足字符串表达式路径
           )
           .build()
           // 添加请求头参数
           .globalOperationParameters(parameters);
}
/**
* swagger 配置
* @param environment 环境
*/
@Bean
public Docket docket(Environment environment) {

   // 设置环境范围
   Profiles profiles = Profiles.of("dev","test");
   // 如果在该环境返回内则返回:true,反之返回 false
   boolean flag = environment.acceptsProfiles(profiles);

   // 创建一个 swagger 的 bean 实例
   return new Docket(DocumentationType.SWAGGER_2)
           .enable(flag) // 是否开启 swagger:true -> 开启,false -> 关闭
           ;
}

3. Swagger注解详解
(1)@Api 作用在类上,用来指定类的描述文字。

@Api(tags = "TestController测试")
@RestController
public class TestController {
    ....
}

(2)@ApiOperation 作用在方法上,用来对接口中具体方法做描述。

@ApiOperation(value = "接口总体描述",notes = "<span style='color:red;'>详细描述:</span>&nbsp;方法详细描述信息")
@GetMapping("/")
public String login(String... index) {
    return "Hello login ~";
}

(3)@ApiImplicitParams 作用在方法上,用来对接口中参数进行说明。
(4)@ApiImplicitParam 作用方法上,修饰接口方法里面的参。

  1. name:方法参数名称
  2. value:方法参数的描述
  3. dataType:方法参数数据类型
  4. defaultValue :方法参数默认值(给测试人员做测试用的)

paramType :

  • 默认query:对应方式一
  • path:对应方式二
  • body:对应方式三

方式一:url?id=1&user='qlh’后面参数

@ApiOperation(value = "接口总体描述", notes = "<span style='color:red;'>详细描述:</span>&nbsp;方法详细描述信息")
@ApiImplicitParams({
        @ApiImplicitParam(name = "username", value = "用户名", dataType = "String", defaultValue = "qlh"),
        @ApiImplicitParam(name = "password", value = "密码", dataType = "String", defaultValue = "123")
})
@PostMapping("/")
public String login(String username, String password) {
    return "Hello login ~";
}

方式二:url/1/2路径后 传参 在路径中获取参数

@ApiOperation(value = "接口总体描述", notes = "<span style='color:red;'>详细描述:</span>&nbsp;方法详细描述信息")
@ApiImplicitParams({
        @ApiImplicitParam(name = "id", value = "id", dataType = "String", defaultValue = "qlh",paramType = "path"),
        @ApiImplicitParam(name = "name", value = "姓名", dataType = "String", defaultValue = "123",paramType = "path")
})
@PostMapping("/index/{id}/{name}")
public String index(@PathVariable("id") String id, @PathVariable("name") String name) {
    return "Hello World ~";
}

方式三:在body中传参

@ApiOperation(value = "接口总体描述", notes = "<span style='color:red;'>详细描述:</span>&nbsp;方法详细描述信息")
@ApiImplicitParams({
        @ApiImplicitParam(name = "id", value = "id", dataType = "String", defaultValue = "xxx", paramType = "body"),
        @ApiImplicitParam(name = "name", value = "姓名", dataType = "String", defaultValue = "123", paramType = "body")
})
@PostMapping("/index")
public String index(@RequestBody Map<String, Object> map) {
    return "Hello World ~";
}

(5)@ApiResponses 作用在接口方法上,用于接口的响应结果。

@ApiResponse(code = 10001, message = "签名错误"),
@ApiResponse(code = 10002, message = "sql错误"),
@ApiResponse(code = 10003, message = "服务怠机,请稍后重试")

(6)@ApiIgnore 作用在类,方法,参数上;忽略类,方法,参数。(忽略的意思:在 swagger-ui.html中不显示)

(7)@ApiModel 作用在类上,用来对实体类进行说明。

@ApiModel(value="类名",description = "实体类描述")

(8)@ApiModelProperty 作用在类中的属性上,用来对实体类中的属性进行说明。

@ApiModelProperty(value = "类属性描述",required = true,example = "属性举例",notes = "备注")

一个好的 swagger接口文档是很有必要的,这样就会减少前后端因为一些接口表述不清楚,导致的后端开发人员来回和前端人员交流沟通,大大的提高了开发的效率。

  Java知识库 最新文章
计算距离春节还有多长时间
系统开发系列 之WebService(spring框架+ma
springBoot+Cache(自定义有效时间配置)
SpringBoot整合mybatis实现增删改查、分页查
spring教程
SpringBoot+Vue实现美食交流网站的设计与实
虚拟机内存结构以及虚拟机中销毁和新建对象
SpringMVC---原理
小李同学: Java如何按多个字段分组
打印票据--java
上一篇文章      下一篇文章      查看所有文章
加:2022-07-03 10:36:15  更:2022-07-03 10:36:56 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 16:58:48-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码