JAVA:Spring Boot 整合 Swagger 的技术指南

news2024/12/27 11:49:23

请关注微信公众号:拾荒的小海螺
博客地址:http://lsk-ww.cn/

1、简述

在现代Web开发中,API文档的生成和维护是非常重要的。Swagger是一款流行的API文档生成工具,它可以帮助开发者自动生成API文档,并提供可视化的接口测试功能。本文将介绍如何在Spring Boot项目中集成Swagger,快速生成API文档。

官网地址:https://swagger.io/

在这里插入图片描述

2、 准备工作

在开始集成Swagger之前,确保你的开发环境已经安装并配置好了以下工具:

  • Java JDK:建议使用JDK 8或以上版本。
  • Maven:用于依赖管理和构建项目。
  • Spring Boot:确保已有一个Spring Boot项目。

3、集成Swagger

Swagger是一套开源工具,用于设计、构建、文档化和使用RESTful Web服务。通过注解,Swagger可以自动生成功能全面的API文档,提供直观的接口信息和在线测试功能。

3.1 添加Swagger依赖

首先,在你的Spring Boot项目的pom.xml文件中添加Swagger相关的依赖:

<dependencies>
    <!-- Swagger依赖 -->
    <dependency>
        <groupId>io.springfox</groupId>
        <artifactId>springfox-boot-starter</artifactId>
        <version>3.0.0</version>
    </dependency>
    <!-- 其他依赖 -->
</dependencies>
3.2 创建Swagger配置类

在项目中创建一个Swagger配置类,用于配置Swagger的基本信息和扫描路径。新建一个类SwaggerConfig:

package com.xhl.shiro.config;

import io.swagger.annotations.ApiOperation;
import io.swagger.models.Contact;
import com.google.common.base.Function;
import com.google.common.base.Optional;
import com.google.common.base.Predicate;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
import springfox.documentation.RequestHandler;
import springfox.documentation.builders.ApiInfoBuilder;
import springfox.documentation.builders.PathSelectors;
import springfox.documentation.builders.RequestHandlerSelectors;
import springfox.documentation.service.ApiInfo;
import springfox.documentation.service.ApiKey;
import springfox.documentation.service.SecurityScheme;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spring.web.plugins.Docket;
import springfox.documentation.swagger2.annotations.EnableSwagger2;

import java.util.List;

import static com.google.common.collect.Lists.newArrayList;

@Configuration
@EnableSwagger2
public class SwaggerConfig implements WebMvcConfigurer {

    @Bean
    public Docket api() {
        return new Docket(DocumentationType.SWAGGER_2)
                .apiInfo(apiInfo())
                .select()
                //加了ApiOperation注解的类,才生成接口文档
                .apis(RequestHandlerSelectors.withMethodAnnotation(ApiOperation.class))
                //包下的类,才生成接口文档
                //.apis(RequestHandlerSelectors.basePackage("com.xhl.shiro.controller"))
                .paths(PathSelectors.any())
                .build()
                .securitySchemes(security());
    }

    private ApiInfo apiInfo() {
        return new ApiInfoBuilder()
                .title("API文档")
                .description("Spring Boot 集成 Swagger 示例")
                .version("1.0.0")
                .build();
    }

    private List<SecurityScheme> security() {
        return newArrayList(
                new ApiKey("token", "token", "header")
        );
    }

}

在上述配置中,RequestHandlerSelectors.basePackage方法指定了Swagger要扫描的包路径,你可以根据项目结构进行调整。

3.3 集成Swagger UI

在Swagger官网下载最新的UI(https://swagger.io/tools/swagger-ui/download/):

git clone https://github.com/swagger-api/swagger-ui.git
cd swagger-ui

然后通过npm指令安装和编译:

npm install
npm run build

然后把编译完成在dist目录下的所有文件拷贝到项目/resources/static/swagger:
在这里插入图片描述

3.4 注解控制器类和方法

Swagger通过注解来生成API文档。在控制器类和方法上使用Swagger注解,描述API接口信息。例如:

import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.List;

@Api(tags = "用户管理")
@RestController
@RequestMapping("/users")
public class UserController {

    @Autowired
    private UserService userService;

    @ApiOperation("获取所有用户")
    @GetMapping
    public List<UserEntity> list() {
        return userService.list();
    }

    @ApiOperation("添加新用户")
    @PostMapping
    public void save(@RequestBody UserEntity user) {
        userService.save(user);
    }

    @ApiOperation("更新用户信息")
    @PutMapping
    public void update(@RequestBody UserEntity user) {
        userService.updateById(user);
    }

    @ApiOperation("删除用户")
    @DeleteMapping("/{id}")
    public void delete(@PathVariable Long id) {
        userService.removeById(id);
    }
}

Swagger常用注解说明:

  • @Api:用在类上,说明该类的作用。

  • @ApiOperation:注解来给API增加方法说明。

  • @ApiParam:定义在参数上

  • @ApiResponses:用于表示一组响应

  • @ApiResponse:用在@ApiResponses中,一般用于表达一个错误的响应信息
    code:数字,例如400
    message:信息,例如"请求参数没填好"
    response:抛出异常的类

  • @ApiModel:描述一个Model的信息(一般用在请求参数无法使用@ApiImplicitParam注解进行描述的时候)

  • @ApiModelProperty:描述一个model的属性

  • @ApiImplicitParams: 用在方法上包含一组参数说明。

  • @ApiImplicitParam:用来注解来给方法入参增加说明。

  • @ApiImplicitParam的参数说明:
    paramType:指定参数放在哪个地方
    header:请求参数放置于Request Header,使用@RequestHeader获取
    query:请求参数放置于请求地址,使用@RequestParam获取
    path:(用于restful接口)–>请求参数的获取:@PathVariable body:(不常用) form(不常用)
    name:参数名
    dataType:参数类型
    required:参数是否必须传 true | false
    value:说明参数的意思
    defaultValue:参数的默认值

3.5 访问Swagger UI

启动Spring Boot项目后,打开浏览器访问http://localhost:8080/swagger/,你将看到Swagger自动生成的API文档界面。在这个界面中,你可以查看所有API的详细信息,并进行在线测试。

服务端接口文档路径:http://localhost:8080/v2/api-docs,通过Explore导入:

在这里插入图片描述

4、配置Swagger的更多选项

Swagger提供了丰富的配置选项,你可以根据项目需求进行定制。例如:

  • 设置全局参数:可以在Swagger配置类中设置全局的请求头、响应头等。
  • 分组API:通过设置不同的Docket实例,可以将API分组展示。
  • 安全配置:可以集成OAuth2、JWT等认证方式,保护API接口。
@Bean
public Docket customDocket() {
    return new Docket(DocumentationType.SWAGGER_2)
            .select()
            .apis(RequestHandlerSelectors.basePackage("com.xhl.shiro"))
            .paths(PathSelectors.any())
            .build()
            .securitySchemes(securitySchemes())
            .securityContexts(securityContexts());
}

5、总结

通过集成Swagger,开发者可以轻松地生成和维护API文档,提高开发效率和API的可用性。在Spring Boot项目中,Swagger的集成过程相对简单,只需添加依赖、配置类和注解即可完成。希望通过本文的介绍,你能够在自己的项目中顺利集成Swagger,为API文档的生成和维护提供便利。

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

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

相关文章

Redis从简单使用到底层原理与分布式缓存

文章目录 [Redis参考手册](https://redis.io/docs/latest/commands/)1 基础认识1.1 安装配置1.2 通用命令1.3 数据类型1.3.1 数据结构与内部编码stringkey的结构hashlistsetsorted_set 1.4 单线程模型 2 redis客户端2.1 RESP协议&#xff08;Redis serialization protocol&…

SpringBoot2:请求处理原理分析-接口参数的常用注解

1、PathVariable 作用说明&#xff1a;获取路径参数 案例&#xff1a; 接口收参形式&#xff1a; GetMapping("/car/{id}/owner/{username}")public Map<String,Object> getCar(PathVariable("id") Integer id,PathVariable("username")…

echarts圆饼图定时器动画

(function () {const WdxjEcharts echarts.init(document.getElementById(wdxjEchart))let num 0;var imgURL "../imagesNew/wd-center.png";var trafficWay [{name: 火车,value: 20}, {name: 飞机,value: 10}, {name: 客车,value: 30}, {name: 轮渡,value: 40}]…

深入解读Docker核心网络管理:架构、模式与通信机制

在容器化技术中&#xff0c;网络管理是影响容器通信和应用部署的重要组成部分。Docker不仅简化了应用的部署过程&#xff0c;还提供了强大的网络管理功能&#xff0c;确保容器之间以及容器与外部系统的网络通信能够高效、稳定地进行。 本文将深入解读Docker的核心网络管理原理…

查看hprof文件

hprof可以用来分析某个进程的内存情况&#xff0c;对我们分析内存泄漏问题有很大帮助&#xff0c;本文主要记录如何生成及查看hprof文件。 1生成.hprof文件 可以使用adb命令生成 .hprof文件&#xff0c;生成的是在执行命令的那一刻&#xff0c;该进程的内存情况&#xff1a; …

后端Web之SpringBoot原理

目录 1.配置优先级 2.Bean 3.SpringBoot原理 1.配置优先级 SpringBoot中支持三种格式的配置文件: .application.properties、application.yml和application. yaml。它们的配置优先级分别降低。虽然springboot支持多种格式配置文件&#xff0c;但是在项目开发时,推荐统一使用…

视频智能分析平台LntonAIServer安防监控平台花屏检测、马赛克检测功能介绍

视频监控系统在现代社会中扮演着至关重要的角色&#xff0c;无论是用于安全监控、交通管理还是其他用途&#xff0c;视频的质量直接关系到系统的可靠性和有效性。LntonAIServer通过新增的视频质量诊断功能&#xff0c;包括花屏检测和马赛克检测&#xff0c;进一步增强了视频监控…

读书学习进阶笔记 # Datawhale X 李宏毅苹果书 AI夏令营

文章目录 &#x1f6a9;学习目标&#x1f6a9;学习内容&#x1f6a9; Task1.1&#x1f3af;为什么优化会失败&#x1f4cc;因非信息梯度导致的失败 &#x1f3af;局部极小值与鞍点&#x1f3af;临界点及其种类&#x1f3af;如何判断临界值种类&#x1f4cc;更简便的方法来判断 …

Unity教程(十四)敌人空闲和移动的实现

Unity开发2D类银河恶魔城游戏学习笔记 Unity教程&#xff08;零&#xff09;Unity和VS的使用相关内容 Unity教程&#xff08;一&#xff09;开始学习状态机 Unity教程&#xff08;二&#xff09;角色移动的实现 Unity教程&#xff08;三&#xff09;角色跳跃的实现 Unity教程&…

MT6895(天玑8100)处理器规格参数_MTK联发科平台方案

MT6895平台 采用台积电5nm工艺&#xff0c;与天玑 8000 相比性能提升 20% &#xff0c;搭载4 个 2.85GHz A78 核心 4 个 2.0GHz A55 核心&#xff0c;CPU能效比上一代提高 25% 。GPU 采用了第三代的Valhall Arm Mali-G610 MC6架构&#xff0c;拥有6核心&#xff0c;搭配天玑81…

ubuntu22.04 qemu 安装windows on arm虚拟机

ubuntu22.04 qemu 安装windows on arm虚拟机 iso: https://uupdump.net/ https://massgrave.dev/windows_arm_links vivo driver: https://fedorapeople.org/groups/virt/virtio-win/direct-downloads/archive-virtio/virtio-win-0.1.262-2/ qemu sudo apt update sudo a…

Java笔试面试题AI答之JDBC(1)

文章目录 1. 什么是JDBC&#xff1f;2. 驱动(Driver)在JDBC中的角色&#xff1f;3. JDBC PreparedStatement比Statement有什么优势&#xff1f;1. 预编译和性能提升2. 参数化查询和安全性3. 更好的可读性和可维护性4. 支持批量操作5. 缓存机制&#xff08;特定数据库环境&#…

【自考zt】【数据结构】【21.10】

【关键字】 数据元素基本单位、抽象数据类型、上三角压缩对称矩阵、排序O&#xff08;n2&#xff09;、不宜链表快排 循环队列入队下标、二叉链表空指针、无相连通图边数差、B树非根结点关键字 链栈无头结点 单链表前二节点和、邻接矩阵度、二叉排序树 一、单选 二、填…

WGCLOUD可以监测交换机的哪些指标数据

WGCLOUD有个模块SNMP监测&#xff0c;可以用于监测交换机、防火墙等设备 监测的指标包括&#xff1a;上行流量&#xff0c;下行流量&#xff0c;每个接口的传输速率&#xff08;包括上行和下行&#xff09;&#xff0c;每个接口的状态&#xff0c;基本信息&#xff0c;温度&am…

Kafka【十一】数据一致性与高水位(HW :High Watermark)机制

【1】数据一致性 Kafka的设计目标是&#xff1a;高吞吐、高并发、高性能。为了做到以上三点&#xff0c;它必须设计成分布式的&#xff0c;多台机器可以同时提供读写&#xff0c;并且需要为数据的存储做冗余备份。 图中的主题有3个分区&#xff0c;每个分区有3个副本&#xf…

解决商店汽水兑换问题——利用贪心算法与循环结构

解决商店汽水兑换问题——利用贪心算法与循环结构 在某商店中,有一种特别的促销活动:三个空汽水瓶可以换一瓶汽水。而且,如果空瓶数量不足,还可以向老板借空瓶(但必须要归还)。给定初始的空瓶数量,如何计算最多可以喝到多少瓶汽水?这个问题可以通过贪心算法来高效解决…

windows手工杀毒-寻找可疑进程之线程

上篇回顾&#xff1a;windows手工杀毒-寻找可疑进程之进程模块-CSDN博客 上篇我们介绍了如何通过进程模块寻找可疑进程&#xff0c;进程模块文件按照PE格式存储&#xff0c;我们可以使用IDA等静态分析&#xff08;不需要运行文件&#xff0c;只看文件内容&#xff09;工…

仕考网:军队文职人员公开招考笔试考试大纲

考试方式和时限 考试方式为闭卷笔试&#xff0c;考试时限为120分钟。 试卷分值和试题类型 试卷满分为100分&#xff0c;试题类型为客观性试题。 测查内容 测查内容主要包括基本知识和岗位能力&#xff0c;具体内容如下。 1.基本知识 2.岗位能力 ①言语理解与表达 ②数…

redis主从+高可用切换+负载均衡

1. redis主从配置 # 在master中 cp sentinel.conf /etc/redis/ vim /etc/redis/sentinel.conf scp /etc/redis/sentinel.conf server2:/etc/redis/ scp /etc/redis/sentinel.conf server3:/etc/redis/ redis-sentinel /etc/redis/sentinel.conf # 启动监控# 在slave中 redis-s…

Java SpringBoot集成Vue.js,构建茶园茶农文化交流平台,四步实现高效互动,MySQL存储数据更稳定

&#x1f34a;作者&#xff1a;计算机毕设匠心工作室 &#x1f34a;简介&#xff1a;毕业后就一直专业从事计算机软件程序开发&#xff0c;至今也有8年工作经验。擅长Java、Python、微信小程序、安卓、大数据、PHP、.NET|C#、Golang等。 擅长&#xff1a;按照需求定制化开发项目…