Swagger简单了解

news2025/7/19 5:24:21

Swagger

  • 介绍

    使用swagger你只需要按照它的规范去定义接口及接口相关信息,在通过swagger衍生出来的一系列项目和工具,就可以做到生成各种格式的接口文档,以及在线接口调试页面等等。

    官网:https://swagger.io/

    knife4j是为javaMVC框架集成Swagger生成Api文档的增强解决方案

    <dependency>
    	<groupId>com.github.xiaoymin</groupId>
        <artifactId>knife4j-spring-boot-starter</artifactId>
        <version>3.0.2</version>
    </dependency>
    
  • 使用方式

    操作步骤:

    1. 导入knife4j的maven坐标

    2. 导入knife4j相关配置类
      在这里插入图片描述

    3. 设置静态资源,否则接口文档页面无法访问

      registry.addResourceHandler("doc.html").addResourceLocations("classpath:/META-INF/resources/");
      registry.addResourceHandler("/webjars/**").addResourceLocations("classpath:/META-INF/resources/webjars/");
              
      
    4. 在LoginCheckFilter中设置不需要处理的请求路径

      @WebFilter(filterName = "LoginCheckFilter",urlPatterns = "/*")//利用过滤器拦截,拦截所有的请求  urlPatterns = "/*"
      @Slf4j
      public class LoginCheckFilter implements Filter {
          //路径匹配器,并支持通配符
          public static final AntPathMatcher PATH_MATCHER = new AntPathMatcher();
      
          @Override
          public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
              HttpServletRequest request = (HttpServletRequest)servletRequest;
              HttpServletResponse response = (HttpServletResponse)servletResponse;
      
      
              //1. 获取本次请求的URI
              String requestURI = request.getRequestURI();
              //如果请求路径为"/backend/index.html"会与放行的"/backend/**"路径匹配不上,会导致无法识别,这时需要路径匹配器
              log.info("拦截到的请求:{}",requestURI);
      
              //1.2 定义不需要处理的请求路径,比如:登录页面,退出,静态资源,主要是拦截controller资源
              String[] urls = new String[]{
                      "/employee/login",
                      "/employee/logout",
                      "/backend/**",
                      "/front/**",
                      "/common/**",
                      "/user/sendMsg",//移动端发送短信
                      "/user/login",//移动端登录
                      "/doc.html",
                      "/webjars/**",
                      "/swagger-resources",
                      "/v2/api-docs"
              };
              //2. 判断本次请求是否需要处理,封装一个方法类进行比较
              boolean check = check(urls, requestURI);
              //3. 如果不需要处理,则直接放行
              if (check) {
                  log.info("本次请求{}不需要处理",requestURI);
                  filterChain.doFilter(request,response);//放行
                  return;
              }
              //   4-1. 判断登录状态,如果已登录,则直接放行  后台系统
              if(request.getSession().getAttribute("employee")!=null){
                  log.info("用户已登录,用户id为:{}",request.getSession().getAttribute("employee"));
      
                  Long employeeId =(Long) request.getSession().getAttribute("employee");
                  BaseContext.setCurrentId(employeeId);//保存用户id,用于公共字段自动填充使用
      
                  long id = Thread.currentThread().getId();
                  log.info("线程id为:{}",id);
                  //已经登录,直接放行
                  filterChain.doFilter(request,response);//放行
                  return;
              }
      
              //   4-2. 判断登录状态,如果已登录,则直接放行  移动端判断
              if(request.getSession().getAttribute("user")!=null){
                  log.info("用户已登录,用户id为:{}",request.getSession().getAttribute("user"));
      
                  Long userId =(Long) request.getSession().getAttribute("user");
                  BaseContext.setCurrentId(userId);//保存用户id,用于公共字段自动填充使用
      
                  long id = Thread.currentThread().getId();
                  log.info("线程id为:{}",id);
                  //已经登录,直接放行
                  filterChain.doFilter(request,response);//放行
                  return;
              }
              //5. 如果未登录则返回未登录结果,通过输出流的方式向客户端响应数据
              log.info("用户未登录");
              response.getWriter().write(JSON.toJSONString(R.error("NOTLOGIN")));
      
              return;
          }
          /*
          * 路径匹配,检查本次请求是否需要放行
          * */
          public boolean check(String[]urls,String requestURI){
              for (String url : urls) {
                  boolean match = PATH_MATCHER.match(url, requestURI);
                  if (match) {
                      return true;
                  }
              }
              return false;
          }
      }
      
      

      在这里插入图片描述

      swagger首页

    在这里插入图片描述

    swagger接口调试
    在这里插入图片描述

    1. 常用注解

      注解说明
      @Api用在请求的类上,例如Controller,表示对类的说明
      @ApiModel用在类上,通常是实体类,表示一个返回响应数据的信息
      @ApiModelProperty用在属性上,描述响应类的属性
      @ApiOperation用在请求的方法上,说明方法的用途、作用
      @ApiImplicitParams用在请求的方法上,表示一组参数说明
      @ApiImplicitParam用在@ApliImplicitParams注解中,指定一个请求参数的各个方面

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

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

相关文章

Linux网络——Shell编程之函数

Linux网络——Shell编程之函数 一、概述二、定义函数的格式1.格式一2.格式二 三、函数的查看和删除1.查看 declare2.删除 declare 四、函数的返回值1.return 返回值2.echo 返回值 五、函数的参数传入与变量范围1.函数的传参2.函数变量的作用范围 六、函数的应用1.阶乘2.递归目录…

知识不断分叉,知怎么来,才知怎么去

知识不断分叉&#xff0c;知怎么来&#xff0c;才知怎么去 定位方法论在中国的演化和继承 趣讲大白话&#xff1a;知道什么来&#xff0c;方知怎么去 【趣讲信息科技159期】 **************************** 定位也谈不上是科学意义上的理论 而是商业实践方法 不能神话 但也要有基…

深入了解目标检测技术--从基本概念到算法入门

前言&#xff1a; Hello大家好&#xff0c;我是Dream。 众所周知&#xff0c;目标检测是计算机视觉领域中的重要任务之一&#xff0c;其目的是识别图像或视频中包含的物体实例并将其定位。实现目标检测可以帮助人们在自动驾驶、机器人导航、安防监控等领域中更好地理解和应用图…

K_A37_002 基于STC89C52RC驱动PCF8591模块 串口与OLED0.96双显示

K_A37_002 基于STC89C52RC驱动PCF8591模块 串口与OLED0.96双显示 所有资源导航一、资源说明二、基本参数参数引脚说明 三、驱动说明IIC地址/采集通道选择/时序对应程序: 四、部分代码说明1、接线引脚定义1.1、STC89C52RCPCF8591模块 五、基础知识学习与相关资料下载六、视频效果…

JavaScript的基础语法

目录 一、初识JavaScript&#xff08;简称JS&#xff09; 1.JavaScript 运行过程 2.JavaScript 的组成 二、JavaScript的规范与调试 1.JavaScript 的书写形式 1.1 行内式 1.2 内嵌式&#xff08;建议写在之前&#xff09; 1.3 外部式&#xff08;建议写在之前&#xf…

基于 SpringBoot+Vue 的在线学习平台(附源码)

摘 要 在Internet高速发展的今天&#xff0c;我们生活的各个领域都涉及到计算机的应用&#xff0c;其中包括学习平台的网络应用&#xff0c;在外国学习平台已经是很普遍的方式&#xff0c;不过国内的管理平台可能还处于起步阶段。学习平台具有学习信息管理功能的选择。学习平台…

【Java|golang】2437. 有效时间的数目

给你一个长度为 5 的字符串 time &#xff0c;表示一个电子时钟当前的时间&#xff0c;格式为 “hh:mm” 。最早 可能的时间是 “00:00” &#xff0c;最晚 可能的时间是 “23:59” 。 在字符串 time 中&#xff0c;被字符 ? 替换掉的数位是 未知的 &#xff0c;被替换的数字…

大型数据库期末总复习【SQL server 2008 基础教程】

一、概述 1.Microsoft SQL Server系统的体系结构 Microsoft SQL Server 2008系统由4个主要部分组成。这4个部分被称为4个服务&#xff0c;这些服务分别是数据库引擎、分析服务、报表服务和集成服务。这些服务之间相互存在和相互应用&#xff0c;它们的关系示意图如图所示&…

Web安全:AppScan 安装和使用.(渗透常用工具)

Web安全&#xff1a;AppScan 安装和使用. AppScan是一款web安全扫描工具&#xff0c;可以利用爬虫技术进行网站安全渗透测试&#xff0c;根据网站入口自动对网页链接进行安全扫描&#xff0c;扫描之后会提供扫描报告和修复建议等. 目录&#xff1a; Web安全&#xff1a;AppSc…

【CSS系列】第四章 · CSS字体属性

写在前面 Hello大家好&#xff0c; 我是【麟-小白】&#xff0c;一位软件工程专业的学生&#xff0c;喜好计算机知识。希望大家能够一起学习进步呀&#xff01;本人是一名在读大学生&#xff0c;专业水平有限&#xff0c;如发现错误或不足之处&#xff0c;请多多指正&#xff0…

51单片机(八)串口通信

❤️ 专栏简介&#xff1a;本专栏记录了从零学习单片机的过程&#xff0c;其中包括51单片机和STM32单片机两部分&#xff1b;建议先学习51单片机&#xff0c;其是STM32等高级单片机的基础&#xff1b;这样再学习STM32时才能融会贯通。 ☀️ 专栏适用人群 &#xff1a;适用于想要…

网易云音乐开发--video模块开发

video页面头部搭建 首先头部的结构是这样的 这里采用的是淘宝双飞翼布局。俩端固定&#xff0c;中间自适应。 这里说一下这个flex:1 flex-grow:可拉伸 flex-shrink:可压缩 flex-basis:当前元素的宽度 flex默认值:flex-grow:0,flex-shrink:1,flex-basis:auto flex:1 flex-gr…

Linux一学就会——系统文件I/O

Linux一学就会——系统文件I/O 有几种输出信息到显示器的方式 #include <stdio.h> #include <string.h> int main() {const char *msg "hello fwrite\n";fwrite(msg, strlen(msg), 1, stdout);printf("hello printf\n");fprintf(stdout, &q…

DEJA_VU3D - Cesium功能集 之 106-鹰眼地图

前言 编写这个专栏主要目的是对工作之中基于Cesium实现过的功能进行整合,有自己琢磨实现的,也有参考其他大神后整理实现的,初步算了算现在有差不多实现小140个左右的功能,后续也会不断的追加,所以暂时打算一周2-3更的样子来更新本专栏(每篇博文都会奉上完整demo的源代码…

如何使用 YOLOv8 神经网络检测图像中的物体

对象检测是一项计算机视觉任务,涉及识别和定位图像或视频中的对象。它是许多应用的重要组成部分,例如自动驾驶汽车、机器人和视频监控。 多年来,已经开发了许多方法和算法来查找图像中的对象及其位置。执行这些任务的最佳质量来自使用卷积神经网络。 YOLO 是这项任务最流行的…

计算机网络——快速了解传输层协议

文章目录 一、TCP和UDP的区别二、TCP1.TCP报文段2.建立连接&#xff08;三次握手&#xff09;3.断开连接&#xff08;四次挥手&#xff09;4.TCP提供的支持 三、UDP参考 一、TCP和UDP的区别 传输层协议有两个——TCP和UDP&#xff0c;二者区别如下&#xff1a; 二、TCP 1.TCP…

MySQL集群

目录 主从复制 主从复制流程&#xff1a; 为什么要有relay log中继日志&#xff1f; 为什么要有主从复制&#xff0c;好处&#xff1f; 实际生产环境中。如果对MySQL数据库的读写都在一台数据库服务器中操作&#xff0c;无论是再安全性、高可用性&#xff0c;还是高并发性等…

MapReduce之WordCount本地测试

1&#xff09;需求 在给定的文本文件中统计输出每一个单词出现的总次数。 &#xff08;1&#xff09;输入数据 2&#xff09;期望输出数据 banzhang 1 cls 2 hadoop 1 jiao 1 ss 2 xue 1 2&#xff09;需求分析 按照MapReduce编程规范&#xff0c;分别编写Mapper&#x…

跨境电商支付平台-PingPong Pay(实现收银台模式沙箱支付)

介绍 PingPongCheckout 跨境支付的 API 接口文档,商户服务器和 PingPongCheckout 服务器进行交互。 供商户/平台服务方的技术开发及测试相关人员使用。 本文档分别从交互流程、通讯方式、签名方 案、交易接口、注意事项等⻆度详细介绍了 PingPongCheckout 跨境支付 API 接口的…

【C++】类和对象(中篇)

几个成员函数 类的6个默认成员函数构造函数引例特点 析构函数概念特点 拷贝构造函数概念特征 赋值运算符重载赋值运算符重载赋值运算符只能重载成类的成员函数不能重载成全局函数前置和后置重载 日期类的实现const成员函数取地址及const取地址操作符重载 类的6个默认成员函数 …