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

SpringBoot整合接口管理工具Swagger

Swagger

Swagger简介

Springboot整合swagger

Swagger 常用注解

一、Swagger简介

​ Swagger 是一系列 RESTful API 的工具,通过 Swagger 可以获得项目的⼀种交互式文档,客户端 SDK 的自动生成等功能。

​ Swagger 的目标是为 REST APIs 定义一个标准的、与语⾔言无关的接口,使人和计算机在看不到源码或者看不到文档或者不能通过网络流量检测的情况下,能发现和理解各种服务的功能。当服务通过 Swagger 定义,消费者就能与远程的服务互动通过少量的实现逻辑。Swagger(丝袜哥)是世界上最流行的 API 表达工具。

二、Springboot整合swagger

​ 使用 Spring Boot 集成 Swagger 的理念是,使用用注解来标记出需要在 API 文档中展示的信息,Swagger 会根据项目中标记的注解来生成对应的 API 文档。Swagger 被号称世界上最流行的 API 工具,它提供了 API 管理的全套解决方案,API 文档管理需要考虑的因素基本都包含,这里将讲解最常用的定制内容。

1、添加swagger坐标

Spring Boot 集成 Swagger 3 很简单,需要引入依赖并做基础配置即可。

<dependency><groupId>io.springfox</groupId><artifactId>springfox-boot-starter</artifactId><version>3.0.0</version>
</dependency>

2、Swagger Helloword 实现

2.1、创建springboot项目

在启动类上加上@EnableOpenApi 注解 启用swagger api文档功能

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import springfox.documentation.oas.annotations.EnableOpenApi;@SpringBootApplication
@EnableOpenApi  //启动swagger api文档注解
public class SpringBootWithSwaggerApplication {public static void main(String[] args) {SpringApplication.run(SpringBootWithSwaggerApplication.class, args);}}

2.2、写一个接口

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;/*** @author 阿水* @create 2023-04-11 9:54*/
@RestController()
public class SwaggerController {@GetMapping ("hello")public String hello(String params) {return "hello swagger"+" param为:"+params;}
}

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-YhlXa2TH-1681180965655)(C:\Users\lps\AppData\Roaming\Typora\typora-user-images\image-20230411100816692.png)]

2.3、访问地址

http://localhost:8080/swagger-ui/index.html

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ERv4KUyj-1681180965656)(C:\Users\lps\AppData\Roaming\Typora\typora-user-images\image-20230411101334968.png)]

三、常用的配置注解

​ Swagger 通过注解表明该接口会生成文档,包括接口名、请求方法、参数、返回信息等

1、Api 注解和 ApiOperation 注解

  • @Api

    使用在类上,表明是swagger资源,@API拥有两个属性:value、tags。

    生成的api文档会根据tags分类,直白的说就是这个controller中的所有接口生成的接口文档都会在tags这个list下;tags如果有多个值,会生成多个list,每个list都显示所有接口

    value的作用类似tags,但是不能有多个值

    语法:@Api(tags = "用户操作")或@Api(tags = {"用户操作","用户操作2"})
    
  • @ApiOperation

    使用于在方法上,表示一个http请求的操作

    语法:@ApiOperation(value = "", notes = "", response = )
    属性说明:value:方法说明标题notes:方法详细描述response:方法返回值类型
    

    案例:使用@Api和@ApiOperation生成api文档

    import io.swagger.annotations.Api;
    import io.swagger.annotations.ApiOperation;
    import org.springframework.web.bind.annotation.GetMapping;
    import org.springframework.web.bind.annotation.RestController;/*** @author 阿水* @create 2023-04-11 9:54*/
    @RestController()
    @Api(tags = {"操作用户"})
    public class SwaggerController {@GetMapping ("hello")@ApiOperation(value = "swagger请求",notes = "阿水的第一个swagger请求",response = String.class)public String hello(String params) {return "hello swagger"+" param为:"+params;}
    }
    

2、ApiImplicitParams 注解和 ApiImplicitParam

@ApiImplicitParams 注解和 @ApiImplicitParam 用于对方法中的非对象参数(参数绑定到简单类型时使用。)进行说明

语法:
@ApiImplicitParams(value = {@ApiImplicitParam(name="", value = "", type = "", required = true, paramType = "", defaultValue  = "")
})属性说明:name:形参名称value:形参的说明文字type:形参类型required:该参数是否必须  true|falseparamType: 用于描述参数是以何种方式传递到 Controller 的,它的值常见有: path, query, body 和 header path 表示参数是『嵌在』路径中的,它和 @PathVariable 参数注解遥相呼应;query 表示参数是以 query string 的形式传递到后台的(无论是 get 请求携带在 url 中,还是 post 请求携带在请求体中),它和 @RequestParam 参数注解遥相呼应;header 表示参数是『藏在』请求头中传递到后台的,它和 @RequestHeader 参数注解遥相呼应的。form 不常用.defaultValue :参数默认值

注意:@ApiImplicitParam 的 name 属性要和 @RequestParam 或 @PathVariable 的 value 遥相呼应。

案例:使用@ApiImplicitParams注解和 @ApiImplicitParam 对方法参数进行说明

import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;/*** @author 阿水* @create 2023-04-11 9:54*/
@RestController()
@Api(tags = {"操作用户"})
public class SwaggerController {@GetMapping ("hello")@ApiOperation(value = "swagger请求",notes = "阿水的第一个swagger请求",response = String.class)@ApiImplicitParams(value ={@ApiImplicitParam(name="param1",value = "参数名1",type = "String",required = true,paramType = "query",defaultValue  = "阿水所想的默认值1" ),@ApiImplicitParam(name="param2",value = "参数名2",type = "String",required = true,paramType = "query",defaultValue  = "阿水所想的默认值2" )})public String hello(String param1,String param2) {return "hello swagger"+" param1为:"+param1+"param2为"+param2;}
}

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-fBArcPkc-1681180965656)(C:\Users\lps\AppData\Roaming\Typora\typora-user-images\image-20230411102447841.png)]

3、ApiModel注解和 ApiModelProperty

  • @ApiModel

    用在实体类上,表示对类进行说明,用于实体类中的参数接收说明。

    语法:@ApiModel("用户类")public class Users {}
    
  • @ApiModelProperty

    用于对实体类中的属性进行说明

    @ApiModel("用户类")
    @Data
    public class Users {@ApiModelProperty(value = "编码:主键")private Integer id;@ApiModelProperty(value = "用户名")private String username;@ApiModelProperty(value = "密码")private String password;}
    

4、ApiResponse 和 ApiResponses

@ApiResponses 注解和 @ApiResponse 标注在 Controller 的方法上,用来描述 HTTP 请求的响应

/*** 添加用户** @param user* @return*/@PostMapping("/add")@ApiOperation(value = "添加用户",notes = "添加用户信息",response = ResponseResult.class)@ApiResponses({ @ApiResponse(code = 200, message = "添加成功", response = ResponseResult.class),@ApiResponse(code = 500, message = "添加失败", response = ResponseResult.class) })public ResponseResult<Void> addUser(@RequestBody User user) {//获得生成的加密盐user.setSalt(SaltUtils.getSalt());int n = userService.addUser(user);if (n > 0) {return new ResponseResult<Void>(200, "添加成功");}return new ResponseResult<Void>(500, "添加失败");}

5、创建 SwaggerConfig 配置类

在 SwaggerConfig 中添加两个方法:(其中一个方法是为另一个方法作辅助的准备工作)

api()方法使用 @Bean,在启动时初始化,返回实例 Docket(Swagger API 摘要对象),这里需要注意的是 .apis(RequestHandlerSelectors.basePackage("xxx.yyy.zzz")) 指定需要扫描的包路路径,只有此路径下的 Controller 类才会自动生成 Swagger API 文档。

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import springfox.documentation.builders.ApiInfoBuilder;
import springfox.documentation.builders.PathSelectors;
import springfox.documentation.builders.RequestHandlerSelectors;
import springfox.documentation.service.ApiInfo;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spring.web.plugins.Docket;/*** Swagger配置类*/
@Configuration  //项目启动时加载此类
public class SwaggerConfig {@Beanpublic Docket api(){return new Docket(DocumentationType.OAS_30).apiInfo(apiInfo()).select()// 此处自行修改为自己的 Controller 包路径。.apis(RequestHandlerSelectors.basePackage("com.lps.controller")).paths(PathSelectors.any()).build();}public ApiInfo apiInfo(){return new ApiInfoBuilder().title("阿水的项目接口文挡").description("阿水的 Project Swagger2 UserService Interface")  //说明信息.termsOfServiceUrl("http://localhost:8080/swagger-ui/index.html") //文档生成的主页地址.version("1.0")  //文档版本.build();}
}

apiInfo()方法配置相对重要一些,主要配置页面展示的基本信息包括,标题、描述、版本、服务条款等,查看 ApiInfo 类的源码还会发现支持 license 等更多的配置

四、springsecurity整合swagger

4.1,配置放行的地址

  http.authorizeRequests().antMatchers( "/swagger-ui.html","/swagger-ui/*","/swagger-resources/**","/v2/api-docs","/v3/api-docs","/webjars/**").permitAll().anyRequest().authenticated();

4.2,替换UI

上面的整个过程已经完成了,但是生成的接口文档的页面,其实很多人不太喜欢,觉得不太符合国人的使用习惯,所有又有一些大神,提供了其他的UI测试页面。这个页面的使用还是比较广泛的。

导入以下依赖、重启工程后访问地址:http://localhost:8080/doc.html

	<dependency><groupId>com.github.xiaoymin</groupId><artifactId>swagger-bootstrap-ui</artifactId><version>1.9.6</version></dependency>

[外链图片转存中...(img-gaTrz5Yf-1681180965657)]

[外链图片转存中...(img-JECwaVpz-1681180965657)]

相关文章:

SpringBoot整合接口管理工具Swagger

Swagger Swagger简介 Springboot整合swagger Swagger 常用注解 一、Swagger简介 ​ Swagger 是一系列 RESTful API 的工具&#xff0c;通过 Swagger 可以获得项目的⼀种交互式文档&#xff0c;客户端 SDK 的自动生成等功能。 ​ Swagger 的目标是为 REST APIs 定义一个标…...

50+常用工具函数之xijs更新指南(v1.2.3)

xijs 是一款开箱即用的 js 业务工具库, 聚集于解决业务中遇到的常用的js函数问题, 帮助开发者更高效的进行业务开发. 目前已聚合了50常用工具函数, 接下来就和大家一起分享一下v1.2.3 版本的更新内容. 1. 添加将树结构转换成扁平数组方法 该模块主要由 EasyRo 贡献, 添加内容如…...

【DAY42】vue学习

const routes [ { path: ‘/foo’, component: Foo }, { path: ‘/bar’, component: Bar } ]定义路由的作用是什么 const routes 定义路由的作用是将每一个 URL 请求映射到一个组件&#xff0c;其中 path 表示请求的 URL&#xff0c;component 表示对应的组件。 通过 const…...

JavaScript小记——事件

HTML 事件是发生在 HTML 元素上的事情。 当在 HTML 页面中使用 JavaScript 时&#xff0c; JavaScript 可以触发这些事件。 Html事件 HTML 事件可以是浏览器行为&#xff0c;也可以是用户行为。 以下是 HTML 事件的实例&#xff1a; HTML 页面完成加载HTML input 字段改变…...

Windows逆向安全(一)之基础知识(八)

if else嵌套 这次来研究if else嵌套在汇编中的表现形式&#xff0c;本次以获取三个数中最大的数这个函数为例子&#xff0c;分析if else的汇编形式 求三个数中的最大值 首先贴上代码&#xff1a; #include "stdafx.h"int result0; int getMax(int i,int j,int k)…...

PyCharm+PyQt5+pyinstaller打包labelImg.exe

0 开头 labelImg是一款标注软件&#xff0c;作为一个开源项目&#xff0c;它的源码可以在github上找到。官方仓库地址为&#xff1a; https://github.com/heartexlabs/labelImg 小白安装时的最新版本编译出来的界面长这样&#xff1a; 之前在小白的博客里&#xff0c;也教过…...

JavaScript里实现继承的几种方式

JavaScript 中的继承可以通过以下几种方式来实现&#xff1a; 1、原型链继承&#xff1a;通过将子类的原型对象指向父类的实例来实现继承。这种方式的优点是实现简单&#xff0c;缺点是父类的私有属性和方法子类是不能访问的。 function Parent() {this.name parent;this.ag…...

前端:运用HTML+CSS+JavaScript实现迷宫游戏

最近感到挺无聊的,于是想到了大学期间关于栈的应用知识,于是就写了这篇博客! 运用HTML+CSS+JavaScript实现迷宫游戏 1. 运行结果2. 实现思路3. 参考代码1. 运行结果 前端:做个迷宫玩玩,不会迷路吧! 2. 实现思路 如果有一个迷宫,有入口,也有出口,那么怎样找到从入口到出…...

NoSQL数据库简介

NoSQL代表“不仅是SQL”&#xff0c;指的是一种数据库管理系统&#xff0c;旨在处理大量非结构化和半结构化数据。与使用具有预定义架构的表格格式的传统SQL数据库不同&#xff0c;NoSQL数据库是无模式的&#xff0c;并且允许灵活和动态的数据结构。 NoSQL数据库是必需的&…...

面试马铭泽

为什么报考这个岗位 首先&#xff0c;我对军人从小有崇敬之情&#xff0c;梦想着穿着庄严的军装&#xff0c;更对祖国有强烈的热爱之心。我的大舅是一名现役军人&#xff0c;老舅也曾服过兵役&#xff0c;从他们的谈吐以及教育中&#xff0c;让我对部队一直充满向往之情&#…...

查看AWS S3的目录

要查看AWS S3存储桶&#xff08;Bucket&#xff09;的目录&#xff0c;您可以通过AWS管理控制台或AWS CLI&#xff08;命令行界面&#xff09;来实现。 在AWS管理控制台中查看&#xff1a; 登录AWS管理控制台。选择S3服务。在S3存储桶列表中选择要查看的存储桶。在对象列表中…...

分布式系统概念和设计-操作系统中的支持和设计

分布式系统概念和设计 操作系统支持 中间件和底层操作系统的关系&#xff0c;操作系统如何满足中间件需求。 中间件需求:访问物理资源的效率和健壮性&#xff0c;多种资源管理策略的灵活性。 任何一个操作系统的目标都是提供一个在物理层&#xff08;处理器&#xff0c;内存&a…...

【redis】bitmap、hyperloglog、GEO案例

【redis】bitmap、hyperloglog、GEO案例 文章目录 【redis】bitmap、hyperloglog、GEO案例前言一、面试题二、统计的类型聚合统计排序统计问题&#xff1a;思路 二值统计 0和1基数统计 三、hyperloglog1、名词理解UV 独立访客PV 页面浏览量DAU 日活跃用户MAU 月活跃度 2、看需求…...

第二章:集合与区间

1.集合 1.内容概述 1.了解集合的意义2.了解常见集合符号的含义3.云用常见的集合符号来表示集合之间的关系、元素与集合之间的关系2.基本概念 1.集合:把一些确定的对象看成一个整体就形成了一个集合。集合一般使用大写字母A、B、C…来表示2.元素:集合中每一个对象叫做这个集合…...

Mysql8.0版本安装

一,使用yum方式安装 1,配置mysql安装源: sudo rpm -Uvh https://dev.mysql.com/get/mysql80-community-release-el7-3.noarch.rpm2,安装mysql8.0: sudo yum --enablerepo=mysql80-community inst...

开放式耳机真的比封闭式强很多吗?推荐几款主流的开放式耳机

​开放式耳机&#xff0c;顾名思义&#xff0c;就是通过骨头振动来传导声音的耳机。相比于传统耳机&#xff0c;它的声音传输更加开放&#xff0c;不会对耳膜造成压迫感&#xff0c;也不会对耳膜旁的内毛细胞造成损害。因此开放式耳机既是运动蓝牙耳机&#xff0c;又是音乐蓝牙…...

Doris(7):数据导入(Load)之Routine Load

例行导入功能为用户提供了义中自动从指定数据源进行数据导入的功能 1 适用场景 当前仅支持kafka系统进行例行导入。 2 使用限制 支持无认证的 Kafka 访问&#xff0c;以及通过 SSL 方式认证的 Kafka 集群。支持的消息格式为 csv 文本格式。每一个 message 为一行&#xff0c;…...

linux 安装php8.1 ZipArchive和libzip最新版扩展安装

1、概述 安装前咱们先看下我本地环境 [rootelk php8]# cat /etc/redhat-release Red Hat Enterprise Linux Server release 7.9 (Maipo) [rootelk php8]# [rootelk php8]# ./bin/php -v PHP 8.1.18 (cli) (built: Apr 17 2023 13:15:17) (NTS) Copyright (c) The PHP Group Z…...

大数据 | 实验一:大数据系统基本实验 | 熟悉常用的HBase操作

文章目录 &#x1f4da;HBase安装&#x1f407;安装HBase&#x1f407;伪分布式模式配置&#x1f407;测试运行HBase&#x1f407;HBase java API编程环境配置 &#x1f4da;实验目的&#x1f4da;实验平台&#x1f4da;实验内容&#x1f407;HBase Shell 编程命令实现以下指定…...

Linux command(split)

原理 在split.c中&#xff0c;首先处理传递给split命令的参数&#xff0c;包括需要拆分的文件、拆分大小/行数等选项。然后&#xff0c;通过调用open()函数打开需要拆分的文件&#xff0c;并获取文件信息。接着根据选项计算每个拆分文件的大小/行数&#xff0c;并根据需要创建输…...

利用最小二乘法找圆心和半径

#include <iostream> #include <vector> #include <cmath> #include <Eigen/Dense> // 需安装Eigen库用于矩阵运算 // 定义点结构 struct Point { double x, y; Point(double x_, double y_) : x(x_), y(y_) {} }; // 最小二乘法求圆心和半径 …...

Linux应用开发之网络套接字编程(实例篇)

服务端与客户端单连接 服务端代码 #include <sys/socket.h> #include <sys/types.h> #include <netinet/in.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <arpa/inet.h> #include <pthread.h> …...

XCTF-web-easyupload

试了试php&#xff0c;php7&#xff0c;pht&#xff0c;phtml等&#xff0c;都没有用 尝试.user.ini 抓包修改将.user.ini修改为jpg图片 在上传一个123.jpg 用蚁剑连接&#xff0c;得到flag...

日语AI面试高效通关秘籍:专业解读与青柚面试智能助攻

在如今就业市场竞争日益激烈的背景下&#xff0c;越来越多的求职者将目光投向了日本及中日双语岗位。但是&#xff0c;一场日语面试往往让许多人感到步履维艰。你是否也曾因为面试官抛出的“刁钻问题”而心生畏惧&#xff1f;面对生疏的日语交流环境&#xff0c;即便提前恶补了…...

springboot 百货中心供应链管理系统小程序

一、前言 随着我国经济迅速发展&#xff0c;人们对手机的需求越来越大&#xff0c;各种手机软件也都在被广泛应用&#xff0c;但是对于手机进行数据信息管理&#xff0c;对于手机的各种软件也是备受用户的喜爱&#xff0c;百货中心供应链管理系统被用户普遍使用&#xff0c;为方…...

椭圆曲线密码学(ECC)

一、ECC算法概述 椭圆曲线密码学&#xff08;Elliptic Curve Cryptography&#xff09;是基于椭圆曲线数学理论的公钥密码系统&#xff0c;由Neal Koblitz和Victor Miller在1985年独立提出。相比RSA&#xff0c;ECC在相同安全强度下密钥更短&#xff08;256位ECC ≈ 3072位RSA…...

树莓派超全系列教程文档--(62)使用rpicam-app通过网络流式传输视频

使用rpicam-app通过网络流式传输视频 使用 rpicam-app 通过网络流式传输视频UDPTCPRTSPlibavGStreamerRTPlibcamerasrc GStreamer 元素 文章来源&#xff1a; http://raspberry.dns8844.cn/documentation 原文网址 使用 rpicam-app 通过网络流式传输视频 本节介绍来自 rpica…...

【Java学习笔记】Arrays类

Arrays 类 1. 导入包&#xff1a;import java.util.Arrays 2. 常用方法一览表 方法描述Arrays.toString()返回数组的字符串形式Arrays.sort()排序&#xff08;自然排序和定制排序&#xff09;Arrays.binarySearch()通过二分搜索法进行查找&#xff08;前提&#xff1a;数组是…...

大语言模型如何处理长文本?常用文本分割技术详解

为什么需要文本分割? 引言:为什么需要文本分割?一、基础文本分割方法1. 按段落分割(Paragraph Splitting)2. 按句子分割(Sentence Splitting)二、高级文本分割策略3. 重叠分割(Sliding Window)4. 递归分割(Recursive Splitting)三、生产级工具推荐5. 使用LangChain的…...

微信小程序 - 手机震动

一、界面 <button type"primary" bindtap"shortVibrate">短震动</button> <button type"primary" bindtap"longVibrate">长震动</button> 二、js逻辑代码 注&#xff1a;文档 https://developers.weixin.qq…...