【Spring Boot】Swagger的常用注解

news2024/11/26 23:29:36
  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("是否删除")
            @Delegate
            private 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 {
        
            @Autowired
            private 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)
            @PutMapping
            public 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.coloradmin.cn/o/1259814.html

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

相关文章

Java LeetCode篇-深入了解关于数组的经典解法

&#x1f525;博客主页&#xff1a; 【小扳_-CSDN博客】 ❤感谢大家点赞&#x1f44d;收藏⭐评论✍ 文章目录 1.0 轮转数组 1.1 使用移位的方式 1.2 使用三次数组逆转法 2.0 消失的数字 2.1 使用相减法 2.2 使用异或的方式 3.0 合并两个有序数组 3.1 使用三指针方式 3.2 使用合…

欧飞信发布WIFI7网卡模组—O7851PM

在当今飞速发展的科技世界中&#xff0c;流畅快速的网络连接已经成为我们生活中不可或缺的一部分。为了满足现代应用环境对于高速、稳定无线连接的需求&#xff0c;欧飞信于今日推出一款最新的WIFI7网卡模组——O7851PM&#xff0c;标志着我们欧飞信在无线通信领域的巅峰技术成…

docker 安装oracle 11,配置客户端远程连接

最近由于工作需要&#xff0c;oracle11数据库的导入导出&#xff0c;所以自己在电脑上模拟个数据库环境&#xff0c; 1.docker的安装&#xff0c;可以参考之前文档&#xff0c;也可以直接yum install 包名字安装 2.下载镜像 docker pull registry.cn-hangzhou.aliyuncs…

数据结构 | TOP-K问题

数据结构 | TOP-K问题 文章目录 数据结构 | TOP-K问题随机生成一些数据&#xff0c;找前k个最大值进行取前k个值建堆找到了前k个结果以及全部代码 TOP-K问题&#xff1a;即求数据结合中前K个最大的元素或者最小的元素&#xff0c;一般情况下数据量都比较大。 就是从N个数里面找…

【香橙派】实战记录2——烧录安卓镜像及基本功能

文章目录 一、安卓烧录二、安卓基本功能1、蓝牙2、相机功能3、投屏 一、安卓烧录 检查环境&#xff1a;检查PC系统&#xff0c;确保有Microsoft Visual C 2008 Redistrbutable - x86&#xff0c;否则在官网下载的官方工具 - 安卓镜像烧录工具里运行vcredist_x86.exe。 插入存储…

bash编程 数组和for循环的应用

bash编程 数组和for循环的应用 1、问题背景2、bash 定义数组3、for循环遍历输出数组所有元素4、编写bash脚本输出每个端口是否在监听状态 1、问题背景 linux服务器开机后&#xff0c;需要检查一组端口是否在监听&#xff0c;以便判断这些端口对应的服务是否在运行。可以考虑使…

Android Termux SFTP如何实现远程文件传输

文章目录 1. 安装openSSH2. 安装cpolar3. 远程SFTP连接配置4. 远程SFTP访问4. 配置固定远程连接地址 SFTP&#xff08;SSH File Transfer Protocol&#xff09;是一种基于SSH&#xff08;Secure Shell&#xff09;安全协议的文件传输协议。与FTP协议相比&#xff0c;SFTP使用了…

矩阵置零[中等]

优质博文&#xff1a;IT-BLOG-CN 一、题目 给定一个m x n的矩阵&#xff0c;如果一个元素为0&#xff0c;则将其所在行和列的所有元素都设为0。请使用原地算法。 示例 1&#xff1a; 输入&#xff1a;matrix [[1,1,1],[1,0,1],[1,1,1]] 输出&#xff1a;[[1,0,1],[0,0,0],[…

科技云报道:再现降价潮背后:云厂商们的“焦虑”

科技云报道原创。 云服务市场再现降价潮。 从上个月开始&#xff0c;各大云厂商开启了新一轮降价&#xff0c;尤其是到双十一期间降价幅度达到了顶峰。比如说&#xff0c;阿里云的“金秋创云季”&#xff0c;华为云的多样化优惠&#xff0c;腾讯云对轻量云服务器的聚焦。 回…

手摸手Element-ui路由VueRoute

后端WebAPI准备 https://router.vuejs.org/zh/guide/ https://v3.router.vuejs.org/zh/installation.html <template><el-table:data"tableData"style"width: 100%":row-class-name"tableRowClassName"><!-- <el-table-colum…

线性分类器--数据处理

数据集划分 通常按照 70%&#xff0c;20% &#xff0c;10% 来分数据集 数据处理 斯坦福的线性分类器体验 http://vision.stanford.edu/teaching/cs231n-demos/linear-classify/

2020年12月 Scratch(四级)真题解析#中国电子学会#全国青少年软件编程等级考试

Scratch等级考试(1~4级)全部真题・点这里 一、单选题(共15题,每题2分,共30分) 第1题 陶朱家开了一间小卖部,学了编程的他想编写一个程序帮助分析小卖部各种商品的售卖情况。如下图所示,目前各个商品的名称和销售量分别存在了两张列表里,一一对应,并且每一样商品的销…

springboot实现验证码功能

转载自 : www.javaman.cn 1、编写工具类生成4位随机数 该工具类主要生成从0-9&#xff0c;a-z&#xff0c;A-Z范围内产生的4位随机数 /*** 产生4位随机字符串*/public static String getCheckCode() {String base "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmn…

JAVA:深入探讨String性能优化让你的程序更高效

1、简述 在现代软件开发中&#xff0c;字符串&#xff08;String&#xff09;是一个不可或缺的数据类型&#xff0c;几乎每个应用程序都在某种程度上使用字符串。然而&#xff0c;由于字符串操作的频繁性质&#xff0c;它们可能成为程序性能的瓶颈之一。在本文中&#xff0c;我…

csgo/steam搬砖项目新手教程

饰品市场持续下跌&#xff0c;CSGO搬砖还有搞头吗&#xff1f; 蒸砖搬砖工程特别适合工作比较忙&#xff0c;没有太多时间操作的人。在不耽误主业的前提下&#xff0c;增加收入来源&#xff0c;不失为一个好办法。在做这个项目的时候&#xff0c;最主要的是选择有利可图的道具进…

电脑热点无法使用,分配IP地址失败

电脑热点无法使用&#xff0c;分配IP地址失败 不知道从什么时候起电脑开热点就无法连接上了&#xff0c;手机提示无法分配IP地址&#xff0c;电脑正常显示。 设置共享网络连接时提示以下内容。 无法启用internet连接共享,为LAN连接配置的IP地址需要使用自动IP寻址 查阅相关资…

RISC-V_WCH系列微控器软件体系云端快速架构

1 概述 RISC-V内核的微控器MCU&#xff0c;正在以更高的性价比&#xff0c;快速取代传统的各类ARM系列微控制处理器。 针对常用的芯成RISC-V内核的泌恒WCH系列微控器MCU&#xff0c;推出了&#xff1a;RISC-V_WCH系列微控器软件体系快速架构云平台。只要以身份证号码做用户名…

C语言——打印出所有的“水仙花数”

所谓水仙花数,是指一个3位数,其各位数字立方和等于该数本身。水仙花数是指一个三位数&#xff0c;它的每个位上的数字的立方和等于它本身。例如&#xff0c;153是一个水仙花数&#xff0c;因为1^3 5^3 3^3 153。 #define _CRT_SECURE_NO_WARNINGS 1#include <stdio.h>…

R语言实操记录——R包无法安装,报错:Warning in system(cmd) : ‘make‘ not found

R语言 R语言实操记录——R包无法安装&#xff0c;报错&#xff1a;Warning in system(cmd) : ‘make‘ not found 文章目录 R语言一、起因二、具体步骤2.1、确认问题源2.2、安装RTools2.3、与R(/Rstudio)绑定2.4、验证可行性 三、疑惑 一、起因 R语言在包的安装上是真的方便&…

概率论与数理统计-第4章 随机变量的数字特征

第4章 随机变量的数字特征 4.1数学期望 一、离散型随机变量的数学期望 定义1设离散型随机变量X的概率分布为 P{Xxi}pi,i1,2,…,如果级数绝对收敛&#xff0c;则定义X的数学期望&#xff08;又称均值&#xff09;为 二、连续型随机变量的数学期望 定义2设X是连续型随机变量…