当前位置: 首页 > news >正文

Java程序设计:spring boot(8)——API ⽂档构建⼯具 - Swagger2

   目录

1 环境整合配置

2 Swagger2 常⽤注解说明

2.1 @Api

2.2 @ApiOperation

2.3 @ApiImplicitParams

2.4 @ApiResponses

2.5 @ApiModel

3 用户模块注解配置

3.1 Controller 使用注解

3.2 JavaBean 使用注解

4 Swagger2 接⼝⽂档访问


       由于 Spring Boot 能够快速开发、便捷部署等特性,通常在使⽤ Spring Boot 构建 Restful 接⼝应⽤ 时考虑到多终端的原因,这些终端会共⽤很多底层业务逻辑,因此我们会抽象出这样⼀层来同时服务于 多个移动端或者Web 前端。对于不同的终端公⽤⼀套接⼝ API 时,对于联调测试的时候就需要知道后端 提供的接⼝ API列表⽂档,对于服务端开发⼈员来说就需要编写接⼝⽂档,描述接⼝的调⽤地址、参数 结果等,这⾥借助第三⽅构建⼯具 Swagger2 来实现 API ⽂档⽣成功能。

1 环境整合配置

pom.xml 依赖添加:

<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>

配置类添加:

@Configuration
@EnableSwagger2
public class Swagger2 {@Beanpublic Docket createRestApi() {return new Docket(DocumentationType.SWAGGER_2).apiInfo(apiInfo()).select().apis(RequestHandlerSelectors.basePackage("com.xxxx.springboot.controller")).paths(PathSelectors.any()).build();}private ApiInfo apiInfo() {return new ApiInfoBuilder().title("⽤户管理接⼝API⽂档").version("1.0").build();}
}

2 Swagger2 常⽤注解说明

2.1 @Api

@Api:⽤在请求的类上,说明该类的作⽤tags="说明该类的作⽤"
@Api(tags="APP⽤户注册Controller")

2.2 @ApiOperation

@ApiOperation:"⽤在请求的⽅法上,说明⽅法的作⽤"value="说明⽅法的作⽤"notes="⽅法的备注说明"
@ApiOperation(value="⽤户注册",notes="⼿机号、密码都是必填项,年龄是选填项,但必须是数
字")

2.3 @ApiImplicitParams

@ApiImplicitParams:⽤在请求的⽅法上,包含⼀组参数说明@ApiImplicitParam:⽤在 @ApiImplicitParams 注解中,指定⼀个请求参数的配置信息 name:参数名value:参数的汉字说明、解释required:参数是否必须传paramType:参数放在哪个地⽅· header --> 请求参数的获取:@RequestHeader· query --> 请求参数的获取:@RequestParam· path(⽤于restful接⼝)--> 请求参数的获取:@PathVariable· body(不常⽤)· form(不常⽤) dataType:参数类型,默认String,其它值dataType="Integer" defaultValue:参数的默认值
@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")
})

2.4 @ApiResponses

@ApiResponses:⽤于请求的⽅法上,表示⼀组响应@ApiResponse:⽤在@ApiResponses中,⼀般⽤于表达⼀个错误的响应信息code:数字,例如400message:信息,例如"请求参数没填好"response:抛出异常的类
@ApiOperation(value = "select请求", notes = "多个参数,多种的查询参数类型")
@ApiResponses({@ApiResponse(code=400, message="请求参数没填好"),@ApiResponse(code=404, message="请求路径没有或⻚⾯跳转路径不对")
})

2.5 @ApiModel

@ApiModel:⽤于响应类上,表示⼀个返回响应数据的信息(这种⼀般⽤在post创建的时候,使⽤@RequestBody这样的场景,请求参数⽆法使⽤@ApiImplicitParam注解进⾏描述的时候)@ApiModelProperty:⽤在属性上,描述响应类的属性
@ApiModel(description= "返回响应数据")
public class RestMessage implements Serializable{@ApiModelProperty(value = "是否成功")private boolean success=true;@ApiModelProperty(value = "返回对象")private Object data;@ApiModelProperty(value = "错误编号")private Integer errCode;@ApiModelProperty(value = "错误信息")private String message;/* getter/setter */
}

3 用户模块注解配置

3.1 Controller 使用注解

@GetMapping("user/{userName}")
@ApiOperation(value = "根据⽤户名查询⽤户记录")
@ApiImplicitParam(name = "userName",value = "查询参数",required = true,paramType
= "path")
public User queryUserByUserName(@PathVariable String userName){return userService.queryUserByUserName(userName);
}
@ApiOperation(value = "根据⽤户id查询⽤户记录")
@ApiImplicitParam(name = "userId",value = "查询参数",required = true,paramType =
"path")
@GetMapping("user/id/{userId}")
public User queryUserByUserId(@PathVariable Integer userId,
HttpServletRequest request){return userService.queryUserByUserId(userId);
}
@GetMapping("user/list")
@ApiOperation(value = "多条件查询⽤户列表记录")
public PageInfo<User> list(UserQuery userQuery){return userService.queryUserByParams(userQuery);
}
@PutMapping("user")
@ApiOperation(value = "⽤户添加")
@ApiImplicitParam(name = "user",value = "⽤户实体类",dataType = "User")
public ResultInfo saveUser(@RequestBody User user){ResultInfo resultInfo=new ResultInfo();try {userService.saveUser(user);} catch (ParamsException e) {e.printStackTrace();resultInfo.setCode(e.getCode());resultInfo.setMsg(e.getMsg());}catch (Exception e) {e.printStackTrace();resultInfo.setCode(300);resultInfo.setMsg("记录添加失败!");}return resultInfo;
}
@PostMapping("user")
@ApiOperation(value = "⽤户更新")
@ApiImplicitParam(name = "user",value = "⽤户实体类",dataType = "User")
public ResultInfo updateUser(@RequestBody User user){ResultInfo resultInfo=new ResultInfo();try {userService.updateUser(user);} catch (ParamsException e) {e.printStackTrace();resultInfo.setCode(e.getCode());resultInfo.setMsg(e.getMsg());}catch (Exception e) {e.printStackTrace();resultInfo.setCode(300);resultInfo.setMsg("记录更新失败!");}return resultInfo;
}
@PutMapping("user/{userId}")
@ApiOperation(value = "根据⽤户id删除⽤户记录")
@ApiImplicitParam(name = "userId",value = "查询参数",required = true,paramType =
"path")
public ResultInfo deleteUser(@PathVariable Integer userId){ResultInfo resultInfo=new ResultInfo();try {userService.deleteUser(userId);} catch (ParamsException e) {e.printStackTrace();resultInfo.setCode(e.getCode());resultInfo.setMsg(e.getMsg());}catch (Exception e) {e.printStackTrace();resultInfo.setCode(300);resultInfo.setMsg("记录删除失败!");}return resultInfo;
}

3.2 JavaBean 使用注解

User.java

@ApiModel(description = "响应结果-⽤户信息")
public class User {@ApiModelProperty(value = "⽤户id",example = "0")private Integer id;@ApiModelProperty(value = "⽤户名")private String userName;@ApiModelProperty(value = "⽤户密码")private String userPwd;/*省略get|set*/
}

UserQuery.java

@ApiModel(description = "⽤户模块条件查询类")
public class UserQuery {@ApiModelProperty(value = "分⻚⻚码",example = "1")private Integer pageNum = 1;@ApiModelProperty(value = "每⻚⼤⼩",example = "10")private Integer pageSize = 10;@ApiModelProperty(value = "⽤户名")private String userName;/*省略get|set*/}

ResultInfo.java

@ApiModel(description = "响应结果 - Model信息")
public class ResultInfo {@ApiModelProperty(value = "响应状态码",example = "200")private Integer code=200;@ApiModelProperty(value = "响应消息结果")private String msg = "success";@ApiModelProperty(value = "响应具体结果信息")private Object result;/*省略get|set*/
}

4 Swagger2 接⼝⽂档访问

       启动⼯程,浏览器访问 :http://localhost:8080/springboot_mybatis/swagger-ui.html

相关文章:

Java程序设计:spring boot(8)——API ⽂档构建⼯具 - Swagger2

目录 1 环境整合配置 2 Swagger2 常⽤注解说明 2.1 Api 2.2 ApiOperation 2.3 ApiImplicitParams 2.4 ApiResponses 2.5 ApiModel 3 用户模块注解配置 3.1 Controller 使用注解 3.2 JavaBean 使用注解 4 Swagger2 接⼝⽂档访问 由于 Spring Boot 能够快速开发、便捷…...

【Python】if选择判断结构详解:逻辑分支与条件判断

目录 &#x1f354; if选择判断结构作用 1.1 if选择判断结构的基本语法 1.2 if选择结构案例 1.3 if...else...结构 1.4 if...elif...else多条件判断结构 1.5 if嵌套结构 &#x1f354; 综合案例&#xff1a;石头剪刀布 2.1 需求分析 2.2 代码实现 2.3 随机出拳 &…...

邮件系统SSL加密传输,保护你的电子邮件免受网络威胁

在互联网的浪潮中&#xff0c;企业数字化转型的步伐不断加快。企业邮箱作为数字化应用的重要组成部分&#xff0c;已成为员工沟通、协同工作和企业管理的关键工具。但是在公共网络安全性普遍较弱的背景下&#xff0c;黑客容易侵入企业网络&#xff0c;监控流量&#xff0c;截获…...

Redis_写时复制(cow)

Redis会根据配置&#xff0c;每隔一段时间中对Redis服务中当下的数据集进行快照。配置自动生成rdb文件&#xff0c;后台使用的是bgsave方式。 save 60 1000 //关闭RDB只需要将所有的save保存策略注释掉即可Redis借助操作系统提供的写时复制技术&#xff08;Copy-On-Write, COW…...

【mysql进阶】4-5. InnoDB 内存结构

InnoDB 内存结构 1 InnoDB存储引擎中内存结构的主要组成部分有哪些&#xff1f; &#x1f50d; 分析过程 从官⽹给出的InnoDB架构图中可以找到答案 InnoDB存储引擎架构链接&#xff1a;https://dev.mysql.com/doc/refman/8.0/en/innodb-architecture.html ✅ 解答问题 InnoD…...

从零入门扣子Bot开发

从零入门扣子Bot开发 工作流简单介绍问题思考工作流实例 图像流简单介绍瘦脸图像流的设计创建图像流设计流程 总结参考链接 工作流简单介绍 工作流起源于生产组织和办公自动化领域&#xff0c;是指在计算机应用环境下&#xff0c;对业务过程的部分或整体进行自动化处理。它通过…...

中药是怎么计价的 复制药方文本划价系统操作教程

一、概述 【软件资源文件下载可以点文章最后卡片】 通过复制药方文本&#xff0c;快速划价并计算出总金额。 可以保存记录&#xff0c;如日期&#xff0c;客户名称&#xff0c;药方名称&#xff0c;金额等&#xff0c;便于查询统计或导出表格。 中药划价系统怎么收费 中药是…...

怎么做网站?

现代网站建设涵盖了多个方面&#xff0c;远不仅仅是简单的网站制作。如果您有兴趣创建网站或者想了解如何建立一个成功的网站&#xff0c;那么您需要了解众多与之相关的关键要素。本文将为您详细介绍这些要素。 选域名&#xff1a;域名是您网站的标识&#xff0c;因此选择一个…...

Centos Stream 9部署Zabbix7.0LTS

目录 1. 系统环境1.1 编辑配置文件/etc/yum.repos.d/epel.repo1.2 安装Zabbix存储库1.3 安装Zabbix server&#xff0c;Web前端&#xff0c;agent 2. MySQL/MariaDB 数据库2.1安装和配置 MySQL/MariaDB 数据库2.2 创建初始数据库2.3 导入初始架构和数据&#xff0c;系统将提示您…...

深入理解Allan方差:用体重数据分析误差的时间尺度与稳定性

文章目录 1. 什么是Allan方差&#xff1f;Allan方差的特点 2. Allan方差与传统方差的区别3. 用体重数据举例分析波动性场景A&#xff1a;体重变化较平稳场景B&#xff1a;体重变化波动较大 4. Allan方差的计算公式与详细步骤5. 不同时间块长度下的Allan方差计算场景A的Allan方差…...

Elasticsearch 解析:倒排索引机制/字段类型/语法/常见问题

Elasticsearch 是一个分布式的开源搜索引擎&#xff0c;广泛用于全文搜索、分析和数据存储。它基于 Apache Lucene 构建&#xff0c;支持 RESTful 风格的 API&#xff0c;使得开发者能够高效地存储和检索数据。本文将详细讲解 Elasticsearch 的基本原理&#xff0c;特别是其倒排…...

数字后端零基础入门系列 | Innovus零基础LAB学习Day5

###Module 12 RC参数提取和时序分析 数字后端零基础入门系列 | Innovus零基础LAB学习Day4 数字后端零基础入门系列 | Innovus零基础LAB学习Day3 数字后端零基础入门系列 | Innovus零基础LAB学习Day2 数字后端零基础入门系列 | Innovus零基础LAB学习Day1 ###LAB12-1 这个章节…...

Redis 内存回收策略小结

Redis 内存回收策略 及时回收内存中不需要的数据&#xff0c;能有效地保持性能和防止内存溢出。Redis内存回收主要有两种场景 删除过期的键值对内存使用达到maxmemory时触发回收策略 删除过期的键值对 惰性删除&#xff1a; 在查询时如果发现 该键值对已经过期则执行删除操作…...

React常用前端框架合集

React 是 Facebook 开发的一款用于构建用户界面的 JavaScript 库。由于其高效、灵活的特性&#xff0c;React 成为了目前最流行的前端框架之一。为了帮助开发者更好地利用 React 构建应用&#xff0c;市场上涌现了许多优秀的辅助工具和框架。本文将详细介绍几个常用的 React 前…...

python对文件的读写操作

任务:读取文件夹下的批量txt数据&#xff0c;并将其写入到对应的word文档中。 txt文件中包含&#xff1a;编号、报告内容和表格数据。写入到word当中&#xff1a;编号、报告内容、表格数据、人格雷达图以及对应的详细说明&#xff08;详细说明是根据表格中的标识那一列中的加号…...

Redis工具类(解决缓存穿透、缓存击穿)

文章目录 前言IBloomFilterObjectMapUtilsCacheClient使用示例具体业务的布隆过滤器控制层服务层 前言 该工具类包含以下功能&#xff1a; 1.将任意对象存储在 hash 类型的 key 中&#xff0c;并可以设置 TTL 2.将任意对象存储在 hash 类型的 key 中&#xff0c;并且可以设置…...

Air780E量产binpkg文件的获取方法

Air780E量产binpkg文件如何获取呢&#xff1f;操作方法如下。 一、背景 最近luatos开发客户增多&#xff0c;客户在量产烧录的时候需要binpkg文件&#xff0c;但是有些客户不知道binpkg文件是什么&#xff0c;在哪里获取&#xff0c;是否可以用soc文件提取出来&#xff0c;使…...

C++STL之stack

1.stack的使用 函数说明 接口说明 stack() 构造空的栈 empty() 检测 stack 是否为空 size() 返回 stack 中元素的个数 top() 返回栈顶元素的引用 push() 将元素 val 压入 stack 中 pop() 将 stack 中尾部的元素弹出 2.stack的模拟实现 #include<vector> namespace abc { …...

git的学习之远程进行操作

1.代码托管GitHub&#xff1a;充当中央服务器仓库的角色 2.git远程进行操作 3.配置本地服务器的公钥 4.推送 5.git远程操作 pull .gitignore 6.给命令配置别名 git config --global alias.st status 7.标签管理 git tag -a [name] -m "XXX" [commit_id] 操作标签…...

蓝桥杯普及题

[蓝桥杯 2024 省 B] 好数 题目描述 一个整数如果按从低位到高位的顺序,奇数位(个位、百位、万位……)上的数字是奇数,偶数位(十位、千位、十万位……)上的数字是偶数,我们就称之为“好数”。 给定一个正整数 N N N,请计算从 1 1...

后进先出(LIFO)详解

LIFO 是 Last In, First Out 的缩写&#xff0c;中文译为后进先出。这是一种数据结构的工作原则&#xff0c;类似于一摞盘子或一叠书本&#xff1a; 最后放进去的元素最先出来 -想象往筒状容器里放盘子&#xff1a; &#xff08;1&#xff09;你放进的最后一个盘子&#xff08…...

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器的上位机配置操作说明

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器专为工业环境精心打造&#xff0c;完美适配AGV和无人叉车。同时&#xff0c;集成以太网与语音合成技术&#xff0c;为各类高级系统&#xff08;如MES、调度系统、库位管理、立库等&#xff09;提供高效便捷的语音交互体验。 L…...

【网络安全产品大调研系列】2. 体验漏洞扫描

前言 2023 年漏洞扫描服务市场规模预计为 3.06&#xff08;十亿美元&#xff09;。漏洞扫描服务市场行业预计将从 2024 年的 3.48&#xff08;十亿美元&#xff09;增长到 2032 年的 9.54&#xff08;十亿美元&#xff09;。预测期内漏洞扫描服务市场 CAGR&#xff08;增长率&…...

dedecms 织梦自定义表单留言增加ajax验证码功能

增加ajax功能模块&#xff0c;用户不点击提交按钮&#xff0c;只要输入框失去焦点&#xff0c;就会提前提示验证码是否正确。 一&#xff0c;模板上增加验证码 <input name"vdcode"id"vdcode" placeholder"请输入验证码" type"text&quo…...

使用van-uploader 的UI组件,结合vue2如何实现图片上传组件的封装

以下是基于 vant-ui&#xff08;适配 Vue2 版本 &#xff09;实现截图中照片上传预览、删除功能&#xff0c;并封装成可复用组件的完整代码&#xff0c;包含样式和逻辑实现&#xff0c;可直接在 Vue2 项目中使用&#xff1a; 1. 封装的图片上传组件 ImageUploader.vue <te…...

苍穹外卖--缓存菜品

1.问题说明 用户端小程序展示的菜品数据都是通过查询数据库获得&#xff0c;如果用户端访问量比较大&#xff0c;数据库访问压力随之增大 2.实现思路 通过Redis来缓存菜品数据&#xff0c;减少数据库查询操作。 缓存逻辑分析&#xff1a; ①每个分类下的菜品保持一份缓存数据…...

C++中string流知识详解和示例

一、概览与类体系 C 提供三种基于内存字符串的流&#xff0c;定义在 <sstream> 中&#xff1a; std::istringstream&#xff1a;输入流&#xff0c;从已有字符串中读取并解析。std::ostringstream&#xff1a;输出流&#xff0c;向内部缓冲区写入内容&#xff0c;最终取…...

工业自动化时代的精准装配革新:迁移科技3D视觉系统如何重塑机器人定位装配

AI3D视觉的工业赋能者 迁移科技成立于2017年&#xff0c;作为行业领先的3D工业相机及视觉系统供应商&#xff0c;累计完成数亿元融资。其核心技术覆盖硬件设计、算法优化及软件集成&#xff0c;通过稳定、易用、高回报的AI3D视觉系统&#xff0c;为汽车、新能源、金属制造等行…...

[Java恶补day16] 238.除自身以外数组的乘积

给你一个整数数组 nums&#xff0c;返回 数组 answer &#xff0c;其中 answer[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积 。 题目数据 保证 数组 nums之中任意元素的全部前缀元素和后缀的乘积都在 32 位 整数范围内。 请 不要使用除法&#xff0c;且在 O(n) 时间复杂度…...

pikachu靶场通关笔记22-1 SQL注入05-1-insert注入(报错法)

目录 一、SQL注入 二、insert注入 三、报错型注入 四、updatexml函数 五、源码审计 六、insert渗透实战 1、渗透准备 2、获取数据库名database 3、获取表名table 4、获取列名column 5、获取字段 本系列为通过《pikachu靶场通关笔记》的SQL注入关卡(共10关&#xff0…...