【Spring Boot】Swagger的常用注解

  1. 在Swagger的开发过程中,我们需要在Controller代码等处添加相应的注解,以便可以提高生成的接口文档的可读性
  2. 为了解决这些问题,Swagger提供了很多的注解,通过这些注解,我们可以更好更清晰的描述我们的接口,包含接口的请求参数、响应数据、数据模型等信息。其核心的注解主要包含以下信息:
    1. 注解位置说明
      @Api加载Controller类上,表示对类的说明
      @ApiModel类(通常是实体类)描述实体类的作用
      @ApiModelProperty属性描述实体类的属性
      @ApiOperation方法说明方法的用途、作用
      @ApiImplicitParams方法表示一组参数说明
      @ApiImplicitParam方法用在@ApiImplicitParams注解中,指定一个请求参数的各个方面的属性
  3. 示例用法
    1. 描述实体类:使用注解@ApiModel、@ApiModelProperty来描述实体类及其类的属性
      1. package com.app.studypro.entity;import com.baomidou.mybatisplus.annotation.FieldFill;
        import com.baomidou.mybatisplus.annotation.TableField;
        import io.swagger.annotations.ApiModel;
        import io.swagger.annotations.ApiModelProperty;
        import lombok.Data;
        import lombok.experimental.Delegate;import java.io.Serializable;
        import java.time.LocalDateTime;/*** 用户信息** @author Administrator*/
        @Data
        @ApiModel("用户信息")
        public class User implements Serializable {private static final long serialVersionUID = 1L;/*** 主键*/@ApiModelProperty("主键")private Long id;/*** 用户名*/@ApiModelProperty("用户名")private String username;/*** 密码*/@ApiModelProperty("密码")private String password;/*** 性别*/@ApiModelProperty("性别")private String sex;/*** 状态 0:禁用,1:正常*/@ApiModelProperty("状态 0:禁用,1:正常")private Integer status;/*** 创建时间*/@ApiModelProperty("创建时间")@TableField(fill = FieldFill.INSERT)private LocalDateTime createTime;/*** 更新时间*/@ApiModelProperty("更新时间")@TableField(fill = FieldFill.INSERT_UPDATE)private LocalDateTime updateTime;/*** 创建人*/@ApiModelProperty("创建人")@TableField(fill = FieldFill.INSERT)private Long createUser;/*** 修改人*/@ApiModelProperty("修改人")@TableField(fill = FieldFill.INSERT_UPDATE)private Long updateUser;/*** 是否删除*/@ApiModelProperty("是否删除")@Delegateprivate Integer isDeleted;}
        
      2. package com.app.studypro.common;import io.swagger.annotations.ApiModel;
        import io.swagger.annotations.ApiModelProperty;
        import lombok.Data;import java.io.Serializable;
        import java.util.HashMap;
        import java.util.Map;@Data
        @ApiModel("返回接口")
        public class ResultBean<T> implements Serializable {private static final long serialVersionUID = -6759928086797729382L;/*** 编码:1成功,0和其它数字为失败*/@ApiModelProperty("编码:1成功,0和其它数字为失败")private Integer code;/*** 错误信息*/@ApiModelProperty("错误信息")private String msg;/*** 数据*/@ApiModelProperty("数据")private T data;/*** 动态数据*/@ApiModelProperty("动态数据")private Map map = new HashMap();public static <T> ResultBean<T> success(T object) {ResultBean<T> r = new ResultBean<T>();r.data = object;r.code = 1;return r;}public static <T> ResultBean<T> error(String msg) {ResultBean r = new ResultBean();r.msg = msg;r.code = 0;return r;}public ResultBean<T> add(String key, Object value) {this.map.put(key, value);return this;}}
        
    2. 描述controller类、方法及其方法参数:可以使用注解@Api、 @ApiOperation、@ApiImplicitParams、@ApiImplicitParam
      1. package com.app.studypro.controller;import com.app.studypro.common.ResultBean;
        import com.app.studypro.entity.User;
        import com.app.studypro.service.UserService;
        import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
        import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
        import io.swagger.annotations.Api;
        import io.swagger.annotations.ApiImplicitParam;
        import io.swagger.annotations.ApiImplicitParams;
        import io.swagger.annotations.ApiOperation;
        import lombok.extern.slf4j.Slf4j;
        import org.apache.commons.lang.StringUtils;
        import org.springframework.beans.factory.annotation.Autowired;
        import org.springframework.cache.annotation.CacheEvict;
        import org.springframework.cache.annotation.CachePut;
        import org.springframework.cache.annotation.Cacheable;
        import org.springframework.util.DigestUtils;
        import org.springframework.web.bind.annotation.*;import javax.servlet.http.HttpServletRequest;@RestController
        @RequestMapping("/users")
        @Slf4j
        @Api(tags = "用户管理接口")
        public class UserController {@Autowiredprivate UserService userService;/*** 用户登录** @param request* @param user* @return*/@PostMapping("/login")@ApiOperation(value = "用户登录")public ResultBean<User> login(HttpServletRequest request, @RequestBody User user) {return ResultBean.success(sqlUser);}/*** 用户退出** @param request* @return*/@PostMapping("/logout")@ApiOperation(value = "用户退出")public ResultBean<String> logout(HttpServletRequest request) {return ResultBean.success("退出成功");}/*** 新增账号* 设置缓存名称为user-cache,将当前缓存名称的缓存全部失效** @param user* @return*/@CachePut(value = "userCache", key = "#result.data.id")@PostMapping@ApiOperation(value = "新增账号")public ResultBean<User> save(HttpServletRequest request, @RequestBody User user) {return ResultBean.success(user);}/*** 根据id修改用户信息** @param user* @return*/@ApiOperation(value = "根据id修改用户信息")@CacheEvict(value = "userCache", allEntries = true)@PutMappingpublic ResultBean<String> update(HttpServletRequest request, @RequestBody User user) {return ResultBean.success("用户信息修改成功");}/*** 根据id查询用户信息** @param id* @return*/@ApiOperation(value = "根据id查询用户信息")@Cacheable(value = "userCache3", key = "#id")@GetMapping("/{id}")public ResultBean<User> getById(@PathVariable Long id) {return ResultBean.error("没有查询到对应用户信息");}/*** 用户信息分页** @param page     当前页* @param pageSize 每页显示条数* @param username 用户名* @return 返回分页用户信息*/@ApiOperation(value = "用户信息分页")@ApiImplicitParams({@ApiImplicitParam(name = "page", value = "当前页", required = true),@ApiImplicitParam(name = "pageSize", value = "每页显示条数", required = true),@ApiImplicitParam(name = "username", value = "用户名", required = false)})@GetMapping("/page")@Cacheable(value = "userCache", key = "#page+'_'+#pageSize+'_'+#username", unless = "#result.data.total==0")public ResultBean<Page<User>> page(int page, int pageSize, String username) {return ResultBean.success(pageInfo);}}
        
  4. 重启web服务之后,再访问接口文档的页面,我们可以发现接口文档中存在很多增加可读性的有效的接口信息。可以看出接口的中文描述,清晰的看到每一个接口是做什么的,接口方法参数什么含义,参数是否是必填的,响应结果的参数是什么含义等信息,都可以清楚的描述出来。这样来说,我们若是想要清晰的描述一个接口,就需要借助于Swagger给我们提供的注解

    1. ​​​​​​​

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/175025.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

相机内存卡照片删除怎么恢复?没有备份可这样操作

在使用相机时&#xff0c;不小心删除了重要的照片可能是每位摄影爱好者的噩梦。然而&#xff0c;通过一些恢复方法&#xff0c;我们有机会挽救被删除的照片。本文将详细介绍相机内存卡照片删除恢复的方法。 图片来源于网络&#xff0c;如有侵权请告知 如果您误删了相机内存卡中…

项目实战——苍穹外卖(DAY10)

如果之前有改过端口号造成WebSocket无法连接的&#xff0c;可以看本篇文章“来单提醒”前的内容进行解决。 课程内容 Spring Task 订单状态定时处理 WebSocket 来单提醒 客户催单 功能实现&#xff1a;订单状态定时处理、来单提醒和客户催单 订单状态定时处理&#xff1a…

Linux shell单双引号区别

shell单双引号区别&#xff1a; Shell脚本中很多时候都在用单引号或双引号来框住字符串&#xff0c;但是他们之间是存在区别的 避免踩坑记录… 单引号 单引号中的任何字符都没有特殊含义,即一些转义字符&#xff0c;$ 变量引用都会无效&#xff0c;它只把他们当作一个单纯的…

242. 有效的字母异位词

这篇文章会收录到 :算法通关村第十二关-白银挑战字符串经典题目-CSDN博客 242. 有效的字母异位词 描述 : 给定两个字符串 s 和 t &#xff0c;编写一个函数来判断 t 是否是 s 的字母异位词。 注意&#xff1a;若 s 和 t 中每个字符出现的次数都相同&#xff0c;则称 s 和 t …

AI数字人播报的意义与未来发展空间

随着人工智能的快速发展&#xff0c;AI数字人播报成为了媒体和信息传播领域的一项创新技术。AI数字人播报利用虚拟形象和自然语言处理技术&#xff0c;为观众提供逼真的播报体验。本文将探讨AI数字人播报的意义以及未来的发展空间。 一、AI数字人播报的意义 提供个性化的播报体…

11【保姆级】-GO语言的struct

11【保姆级】-GO语言的struct 一、Go的面向对象1.1 说明 二、结构体2.1 结构体和结构体变量(实例)的区别和联系2.2 声明结构体 和 细节说明2.3 结构体在内存中的布局2.4 创建结构体和访问结构体的四种方式 在学习GO语言时&#xff1a; 先建立整体框架&#xff0c;然后再去抠细节…

Linux解压缩命令 tar -zxvf 压缩-zcvf 到指定文件夹-C

Linux解压缩命令 tar -zxvf 压缩-zcvf 到指定文件夹-C tar -zxvf x.tar.gz 解压提取 x.tar.gztar -zcvf x.tar.gz x.source 将 x.source 压缩打包为 x.tar.gztar -zxvf x.tar.gz --directory /tmp 解压提取 x.tar.gz 到 /tmp 文件夹 解压提取 x.tar.gz 到当前文件夹 横杆(减…

C语言错误处理之sterror和perror函数以及断言处理方式

目录 前言 sterror函数 perror函数 断言处理方式 前言 在错误处理一中&#xff0c;我们解释了C语言三种处理方式中的错误号处理方式&#xff0c;这一篇我们在基于上一篇的基础上加入了sterror函数与perror函数&#xff0c;以及断言处理方式的内容...... sterror函数 包含…

sql优化的知识点?

SQL优化是提升数据库性能的重要手段&#xff0c;以下是SQL优化的详细知识点&#xff1a; 正确使用索引&#xff1a;索引是加速数据检索的关键因素&#xff0c;可以通过合理的索引设计来提升查询性能。例如&#xff0c;在频繁使用的列上创建索引&#xff0c;使用联合索引等。 避…

fastsocket提升nginx CPS性能分析

fastsocket是针对单机网络性能优化&#xff0c;提升单机的cps。 提升现在单机7LB服务的性能&#xff0c;预计cps的性能提升一倍。 内核对nginx的性能瓶颈损耗主要在内核的三把锁。 1. accpet的全局队列的sk_lock锁 2. new_inode中的全局inode_lock锁 3. sock_alloc_file中的…

【每日一题】子数组的最小值之和

文章目录 Tag题目来源题目解读解题思路方法一&#xff1a;贡献法单调栈 写在最后 Tag 【贡献法】【单调栈】【数组】【2023-11-27】 题目来源 907. 子数组的最小值之和 题目解读 计算整数数组的连续子数组中最小值的和。 解题思路 本题朴素的解决思想是求出所有的连续子数组…

SQL函数使用大全

SQL函数使用大全 在数据库管理中&#xff0c;SQL函数是一种强大的工具&#xff0c;它们可以帮助我们处理数据&#xff0c;进行复杂的计算&#xff0c;甚至改变数据的显示方式。本文将介绍两种主要的SQL函数&#xff1a;Aggregate函数和Scalar函数&#xff0c;以及它们的使用方…

6.golang函数

函数是执行特定任务的代码块。函数接受输入&#xff0c;对输入执行一些计算&#xff0c;然后生成输出。 函数声明 在 go 中声明函数的语法是&#xff1a; func name(parameter) (result-list){//body }函数声明以func关键字开头&#xff0c;后跟name(函数名)。在括号中指定参…

小航助学题库蓝桥杯题库stem选拔赛(21年1月)(含题库教师学生账号)

需要在线模拟训练的题库账号请点击 小航助学编程在线模拟试卷系统&#xff08;含题库答题软件账号&#xff09;_程序猿下山的博客-CSDN博客 需要在线模拟训练的题库账号请点击 小航助学编程在线模拟试卷系统&#xff08;含题库答题软件账号&#xff09;_程序猿下山的博客-CSD…

SQL Server:流程控制语言详解

文章目录 一、批处理、脚本和变量局部变量和全局变量1、局部变量2、全局变量 二、顺序、分支和循环结构语句1、程序注释语句2、BEGIN┅END语句块3、IF┅ELSE语句4、CASE语句5、WHILE语句6、BREAK和CONTINUE语句BREAK语句CONTINUE语句 三、程序返回、屏幕显示等语句1、RETURN语句…

Python continue的用法详解与转义字符及用法

Python continue的用法详解 continue 的功能和 break 有点类似&#xff0c;区别是 continue 只是忽略当次循环的剩下语句&#xff0c;接着开始下一次循环&#xff0c;并不会中止循环&#xff1b;而 break 则是完全中止循环本身。 如下程序示范了continue 的用法&#xff1a; # …

谈谈一个异或交换算法

以下全部用c举例 int a[10] {0,1,2,3,4,5,6,7,8,9};我们想交换数组a中第5个和第6个的值&#xff0c;通常想到的做法是创建一个中间变量作为中转&#xff0c;如下&#xff1a; #include<stdio.h>void swap2num(int a[], int i, int j) {int tmp a[i];a[i] a[j];a[j] …

工程数学笔记 | 傅里叶级数/变换的本质理解

以下内容纯属个人学习记录&#xff0c;难免有误&#xff0c;欢迎指正~ 引子 虽已工作数宰&#xff0c;但当因为工作的需要再次碰到傅里叶级数/变换相关的知识时是还是难免汗流浃背&#xff0c;读书时的痛苦的回忆涌上心头&#xff0c;果然曾经欠下的总归是要偿还的&#xff0c…

Python基础语法之学习print()函数

Python基础语法之学习print函数 1、代码2、效果 1、代码 print("Hello World") print("Hello World1","Hello World2") print("Hello World1\n","Hello World2") print("Hello World",end" 默认结束符是行号…

传输层协议[精选]

网络: 跨主机通信. 互联网通信: 两点之间的通信路径有无数条. 集线器: 把一根网线差出来两根,但是同一时刻只能有一根线跑.交换机: 组建局域网.路由器: 本质就是将两个局域网连接起来 交换机和路由器之间的区别越来越模糊. 调制解调器: 使用电话线上网的时候,需要将电话线的模…