Spring Boot整合Swagger2 Swagger2配置

news2024/12/23 19:28:39

目录

什么是Swagger?

Swagger如何使用

如何使用Swagger

查看SwaggerAPI文档


什么是Swagger?

Swagger是一款流行的RESTful API文档生成工具,它支持多种编程语言和多种框架,包括但不限于Java、Python、Node.js、Go等,Spring Boot也提供了对Swagger的支持。Swagger可以根据注解生成API文档,支持在线测试API接口、生成客户端代码等多种功能。

Swagger如何使用

在使用Swagger之前,我们首先需要在pom中添加依赖:

<!-- swagger -->
<dependency>
   <groupId>io.springfox</groupId>
   <artifactId>springfox-swagger2</artifactId>
   <version>2.9.2</version>
</dependency>
<dependency>
   <groupId>io.springfox</groupId>
   <artifactId>springfox-swagger-ui</artifactId>
   <version>2.9.2</version>
</dependency>

其中,springfox-swagger2用于定义API信息,springfox-swagger-ui用于提供展示API文档的页面。

在Spring Boot中,我们需要添加一个Swagger配置类:

import io.swagger.annotations.ApiOperation;
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.service.Contact;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spring.web.plugins.Docket;
import springfox.documentation.swagger2.annotations.EnableSwagger2;

@Configuration
@EnableSwagger2
public class SwaggerConfig {
    /**
     * 创建接口api
     * @return
     */
    @Bean
    public Docket apiDocket() {
        return new Docket(DocumentationType.SWAGGER_2) // 指定生成的文档的类型是Swagger2
//                .pathMapping("/swagger") // 通过接口直接访问swagger,不配置的话默认使用/swagger-ui.html访问
                .select()
                // 生成接口api的方式一
                .apis(RequestHandlerSelectors.basePackage("org.example.ctrl")) // 需要应用的接口所在的包,可以添加多个在不同包下的ctrl
//                .apis(RequestHandlerSelectors.basePackage("org.example.ctrl"))
                // 生成接口api的方式二
//                .apis(RequestHandlerSelectors.withMethodAnnotation(ApiOperation.class)) // 扫描所有使用了@Api注解的接口类,用这种方式生成api更灵活
                // 扫描所有 .apis(RequestHandlerSelectors.any())
                .paths(PathSelectors.any())
                .build()
                .apiInfo(apiInfo());
    }

    /**
     * 设置摘要信息
     * @return
     */
    private ApiInfo apiInfo() {
        // 用ApiInfoBuilder进行摘要定制
        return new ApiInfoBuilder()
                .title("接口示例API") // 设置标题
                .description("项目demo接口示例API模板") // 描述
                .contact(new Contact("demoAuth","https://blog.csdn.net/MrBInsomnia?spm=1000.2115.3001.5343","121@163.com")) // 设置作者信息、联系方式:Contact(String name, String blogUrl, String email)
                .version("1.0.0") // 版本
                .build();
    }
}

其中,@EnableSwagger2注解开启Swagger功能。在createRestApi()方法中,我们配置了API信息以及扫描的Controller包路径,之后就可以通过访问http://localhost:port/swagger-ui.html来查看并测试API接口了。

如何使用Swagger

首先,在Controller中,我们可以通过各种注解来标记接口信息,如下所示:

@Controller
@Api(tags = "Http渠道数据同步规范示例接口", description = "Http渠道数据同步规范示例接口 | 测试接口", hidden = false)
public class HTTPSyncController {
    @Autowired
    private UserMongoService userMongoService;

    @GetMapping("/getUsers")
    @ResponseBody
    @ApiOperation(value = "获取用户列表", notes = "获取所有用户列表信息")
    public List getUsers() {
        return userMongoService.getUsers();
    }
    @RequestMapping(value = "/data/user/syncpost", method = RequestMethod.POST)
    @ApiOperation(value = "用户新增", notes = "同步用户新增信息")
    public void syncuserpost(@RequestBody String data, HttpServletResponse response, HttpServletRequest request) {
        try {
            userMongoService.add(data);
            response.setStatus(200); // 设置状态码为 200
            response.getWriter().write("同步成功!"); // 设置响应数据为 "Hello World!"
        } catch (Exception e) {
            throw new RuntimeException(e);
        }
    }
    @RequestMapping(value = "/data/user/syncdel/{id}", method = RequestMethod.DELETE)
    @ApiOperation(value = "用户删除", notes = "同步用户删除信息")
    public void syncuserdel(@PathVariable String id, HttpServletResponse response, HttpServletRequest request) {
        try {
            userMongoService.del(id);
            response.setStatus(200); // 设置状态码为 200
            response.getWriter().write("同步成功!"); // 设置响应数据为 "Hello World!"
        } catch (Exception e) {
            throw new RuntimeException(e);
        }
    }

}

 以下是一些常用参数说明:

@Api 修饰整个类,描述Controller的作用。
@ApiOperation 修饰一个类的一个方法,或者说一个接口 ,可以描述这个方法的功能和注意事项。若不使用则用函数名作为方法功能。
       参数:value="说明方法的用途、作用"

                notes="方法的备注说明"

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

@ApiImplicitParams 修饰方法,可以描述这个方法的参数的作用。若不使用则用参数名作为参数的作用。
@ApiImplicitParam:用在@ApiImplicitParams注解中,指定一个请求参数的各个方面
        name:参数名
        value:参数的汉字说明、解释
        required:参数是否必须传
        paramType:参数放在哪个地方
            · header --> 请求参数的获取:@RequestHeader
            · query --> 请求参数的获取:@RequestParam
            · path(用于restful接口)--> 请求参数的获取:@PathVariable
            · body(不常用)
            · form(不常用)    
        dataType:参数类型,默认String,其它值dataType="Integer"       
        defaultValue:参数的默认值
@ApiModel 修饰实体类,可以描述这个类的功能。
@ApiModelProperty 修饰实体类的属性,可以描述这个属性的作用。
@ApiIgnore修饰参数、方法和类,可以在自动生成文档时对修饰的对象进行忽略。
@ApiError :发生错误返回的信息 

查看SwaggerAPI文档

配置完成之后,我们就可以通过访问http://localhost:port/swagger-ui.html来查看并测试API文档了:

 

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

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

相关文章

【机器学习】第二章:K近邻(分类)

系列文章目录 第二章&#xff1a;K近邻&#xff08;分类&#xff09; 相关代码地址&#xff1a;https://github.com/wzybmw888/MachineLearning.git 文章目录 系列文章目录一、最近邻算法二、最近邻算法的缺陷&#xff08;1&#xff09;策略一&#xff1a;K近邻&#xff08;k‐…

java源码为什么需要编译成字节码?

作用1: jvm支持多语言,需要字节码作为统一的规范 作用2: 字节码转成机器的指令会更快 作用3: 如果没有对应的反编译器,字节码还具有一定的安全保密作用

【Rust日报】2023-06-02 Rust 1.70.0 稳定版发布

Rust 1.70.0 稳定版发布 Rust 团队很高兴地宣布 Rust 的新版本 1.70.0。Rust 是一种编程语言&#xff0c;它使每个人都能构建可靠、高效的软件。 最大的特性是&#xff0c;OnceCell稳定版可用啦。 如果你通过 rustup 安装了以前版本的 Rust&#xff0c;你可以通过以下方式获得 …

Linux 之大数据定制篇-Shell 编程

Linux 之大数据定制篇-Shell 编程 为什么要学习Shell 编程 Linux 运维工程师在进行服务器集群管理时&#xff0c;需要编写Shell 程序来进行服务器管理。对于JavaEE 和Python 程序员来说&#xff0c;工作的需要&#xff0c;你的老大会要求你编写一些Shell 脚本进行程序或者是服…

Mocha AE:图层相关面板

Mocha AE 左侧的图层面板、图层属性面板以及边缘属性面板提供了与图层、样条、跟踪等相关的选项。 Layers 图层 图层的上下顺序相当重要。 上方所有图层的样条区域将被自动排除出跟踪遮罩 Track Mattes。 也可在同一图层上绘制多个样条形状。相交的样条区域将被排除出遮罩。 Vi…

【MySQL】一文带你了解MySQL中的子查询

文章目录 1. 需求分析与问题解决1. 1实际问题1.2 子查询的基本使用1.3 子查询的分类 2. 单行子查询2.1 单行比较操作符2.2 代码示例2.3 HAVING 中的子查询2.4 注意的问题 3. 多行子查询3.1 多行比较操作符3.2 代码示例 4. 相关子查询4.1 相关子查询执行流程4.2 代码示例 子查询…

图论学习(六)

图的连通度 删去任意一条边后便不连通 删去任意一条边后仍连通&#xff0c;但删去点u后不连通。 G3和G4删去任意一条边或任意一个点后仍连通&#xff0c;但从直观上看&#xff0c;G4的连通程度比G3高。 割边 设e是图G的一条边&#xff0c;若ω(G-e)>ω(G)&#xff0c;则…

uniapp微信一键登录微信授权

前言 现在小程序逐渐成为主流&#xff0c;常用的微信授权登录很重要很常见的一个功能&#xff0c;今天自己总结了一下。 准备工作 1.如果你想自己想试一下这个功能首先你需要有一个开发中的项目并且你在开发成员里面。 2.配置自己的微信开发者工具的appid码 3.在hbuilderx的…

echarts 如何实现图例单个数据项加上背景颜色和饼图中的背景图自适应

需求: 实现效果如下: ECharts中,可以通过设置legend中的formatter属性来自定义图例项的显示格式。以下是一个示例: option = {// ...legend: {data: [A, B, C],formatter: function (name) {var color = #fff;if (name === A) {color = #ff0000; // 设置A的背景颜色为红色…

如何使用ArcGIS计算容积率

字段计算 为建筑图层新建一个area字段&#xff0c;用于记录单层建筑的面积&#xff0c;如下图所示。 单层建筑面积 为建筑图层新建一个areaAll字段&#xff0c;用于记录总建筑面积&#xff0c;areaAllarea*floor&#xff0c;如下图所示。 计算总面积 为小区图层新建一个area…

chatgpt赋能python:Python大于0的SEO

Python大于0的SEO Python是一种高级编程语言&#xff0c;被广泛用于数据科学、机器学习、Web应用程序和网络爬虫等领域。Python大于0的SEO是指使用Python编写程序来优化网站的排名。在本文中&#xff0c;我们将介绍Python大于0的SEO的基础知识和一些实用技巧。 什么是Python大…

【redis基础】哨兵

hi,这里是redis系列文章&#xff0c;本篇是【redis基础】哨兵&#xff0c;上一篇链接&#xff1a;【redis】redis主从复制_努力努力再努力mlx的博客-CSDN博客 目录 概念 作用 如何使用哨兵&#xff08;案例演示实战步骤&#xff09; redis sentinel架构提前说明 重点参数…

【Java】Java(四十九):注解及自定义注解

文章目录 什么是注解&#xff1f;概述注解的作用自定义注解注解的定义格式带有属性的注解 注解的使用注解的使用格式 元注解元注解的作用&#xff1a;常用元注解&#xff1a; 注解解析 什么是注解&#xff1f; 注解(Annotation)也称为元数据&#xff0c;是一种代码级别的说明注…

数据库管理-第八十期 Exadata to RAC(x86) ADG(20230605)

数据库管理 2023-06-05 第八十期 Exadata to RAC(x86) ADG1 环境2 搭建流程2.1配置静态监听-主库2.2配置静态监听-备库2.3配置本地命名-主备库2.4数据库配置-主库2.5生成参数文件和密码文件-主库2.6创建目录并上传密码文件-备库2.7添加数据库服务-备库2.8修改参数文件-备库2.9复…

超级智能的治理

原文链接&#xff1a;https://openai.com/blog/governance-of-superintelligence#SamAltman 作者丨Sam Altman&#xff0c;Greg Brockman&#xff0c;Ilya Sutskever 译者 | Ted Liu 审校 | LsssY 编辑丨肖钰雯 现在是开始思考超级智能治理的好时机--未来的人工智能系统甚至比通…

基于SpringBoot+vue的租房网站设计与实现

博主介绍&#xff1a; 大家好&#xff0c;我是一名在Java圈混迹十余年的程序员&#xff0c;精通Java编程语言&#xff0c;同时也熟练掌握微信小程序、Python和Android等技术&#xff0c;能够为大家提供全方位的技术支持和交流。 我擅长在JavaWeb、SSH、SSM、SpringBoot等框架下…

Python中的Time和DateTime

Python在处理与时间相关的操作时有两个重要模块&#xff1a;time和datetime。在本文中&#xff0c;我们介绍这两个模块并为每个场景提供带有代码和输出的说明性示例。 time模块主要用于处理时间相关的操作&#xff0c;例如获取当前时间、时间的计算和格式化等。它提供了一些函数…

老胡的周刊(第093期)

老胡的信息周刊[1]&#xff0c;记录这周我看到的有价值的信息&#xff0c;主要针对计算机领域&#xff0c;内容主题极大程度被我个人喜好主导。这个项目核心目的在于记录让自己有印象的信息做一个留存以及共享。 &#x1f3af; 项目 dm-ticket[2] 大麦网自动购票, 支持 docker …

4、数据库:MySQL部署 - 系统部署系列文章

MySQL数据库在其它博文中有介绍&#xff0c;包括学习规划系列。今天就讲讲MySQL的部署事情。 一、先下载MySQL数据库&#xff1b; 到下面这个网址去下载数据库&#xff0c;这里下载的社区版&#xff1a; https://dev.mysql.com/downloads/installer/ 二、安装数据库&#xff1b…

读改变未来的九大算法笔记04_公钥加密

1. 加密的目的就是传输秘密 2. 分块密码&#xff08;Block Cipher&#xff09;的现代加密技术使用了相加把戏的变体 2.1. 加法得出的结果能用于统计分析&#xff0c;这意味着一些人能通过分析你的大量加密消息来得到密钥 2.2. 任何知道密钥的人都能用相反的步骤运行所有操作…