Springboot——Swagger

news2024/11/20 16:59:32

Swagger2 的 maven 依赖

使用 Swagger2 工具,必须要导入 maven 依赖,当前官方最高版本是 2.8.0,我尝试了一下,个人感觉页面展示的效果不太好,而且不够紧凑,不利于操作。另外,最新版本并不一定是最稳定版本,当前我们实际项目中使用的是 2.2.2 版本,该版本稳定,界面友好,所以本节课主要围绕着 2.2.2 版本来展开,依赖如下:

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

Swagger2 的配置

使用 Swagger2 需要进行配置,Spring Boot 中对 Swagger2 的配置非常方便,新建一个配置类,Swagger2 的配置类上除了添加必要的 @Configuration 注解外,还需要添加 @EnableSwagger2 注解。

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;
import springfox.documentation.swagger2.annotations.EnableSwagger2;
 
/**
 * @author shengwu ni
 */
@Configuration
@EnableSwagger2
public class SwaggerConfig {
 
    @Bean
    public Docket createRestApi() {
        return new Docket(DocumentationType.SWAGGER_2)
                // 指定构建api文档的详细信息的方法:apiInfo()
                .apiInfo(apiInfo())
                .select()
                // 指定要生成api接口的包路径,这里把controller作为包路径,生成controller中的所有接口
                .apis(RequestHandlerSelectors.basePackage("com.itcodai.course06.controller"))
                .paths(PathSelectors.any())
                .build();
    }
 
    /**
     * 构建api文档的详细信息
     * @return
     */
    private ApiInfo apiInfo() {
        return new ApiInfoBuilder()
                // 设置页面标题
                .title("Spring Boot集成Swagger2接口总览")
                // 设置接口描述
                .description("跟武哥一起学Spring Boot第06课")
                // 设置联系方式
                .contact("倪升武," + "CSDN:http://blog.csdn.net/eson_15")
                // 设置版本
                .version("1.0")
                // 构建
                .build();
    }
}

在该配置类中,已经使用注释详细解释了每个方法的作用了,在此不再赘述。到此为止,我们已经配置好了 Swagger2 了。现在我们可以测试一下配置有没有生效,启动项目,在浏览器中输入 localhost:8080/swagger-ui.html,即可看到 swagger2 的接口页面,如下图所示,说明Swagger2 集成成功。

Swagger2 的使用

上面我们已经配置好了 Swagger2,并且也启动测试了一下,功能正常,下面我们开始使用 Swagger2,主要来介绍 Swagger2 中的几个常用的注解,分别在实体类上、 Controller 类上以及 Controller 中的方法上,最后我们看一下 Swagger2 是如何在页面上呈现在线接口文档的,并且结合 Controller 中的方法在接口中测试一下数据。

1、实体类注解

本节我们建一个 User 实体类,主要介绍一下 Swagger2 中的 @ApiModel 和 @ApiModelProperty 注解,同时为后面的测试做准备。

import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
 
@ApiModel(value = "用户实体类")
public class User {
 
    @ApiModelProperty(value = "用户唯一标识")
    private Long id;
 
    @ApiModelProperty(value = "用户姓名")
    private String username;
 
    @ApiModelProperty(value = "用户密码")
    private String password;
 
    // 省略set和get方法
}

解释下 @ApiModel 和 @ApiModelProperty 注解:

@ApiModel 注解用于实体类,表示对类进行说明,用于参数用实体类接收。

@ApiModelProperty 注解用于类中属性,表示对 model 属性的说明或者数据操作更改。

2、Controller 类中相关注解

我们写一个 TestController,再写几个接口,然后学习一下 Controller 中和 Swagger2 相关的注解。

import com.itcodai.course06.entiy.JsonResult;
import com.itcodai.course06.entiy.User;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
 
@RestController
@RequestMapping("/swagger")
@Api(value = "Swagger2 在线接口文档")
public class TestController {
 
    @GetMapping("/get/{id}")
    @ApiOperation(value = "根据用户唯一标识获取用户信息")
    public JsonResult<User> getUserInfo(@PathVariable @ApiParam(value = "用户唯一标识") Long id) {
        // 模拟数据库中根据id获取User信息
        User user = new User(id, "倪升武", "123456");
        return new JsonResult(user);
    }
}

我们来学习一下 @Api 、 @ApiOperation 和 @ApiParam 注解:

@Api 注解用于类上,表示标识这个类是 swagger 的资源。

@ApiOperation 注解用于方法,表示一个 http 请求的操作。

@ApiParam 注解用于参数上,用来标明参数信息。

这里返回的是 JsonResult,是第02课中学习返回 json 数据时封装的实体。以上是 Swagger 中最常用的 5 个注解,接下来运行一下项目工程,在浏览器中输入 localhost:8080/swagger-ui.html 看一下 Swagger 页面的接口状态。

可以看出,Swagger 页面对该接口的信息展示的非常全面,每个注解的作用以及展示的地方在上图中已经标明,通过页面即可知道该接口的所有信息,那么我们直接在线测试一下该接口返回的信息,输入id为1,看一下返回数据:

可以看出,直接在页面返回了 json 格式的数据,开发人员可以直接使用该在线接口来测试数据的正确与否,非常方便。上面是对于单个参数的输入,如果输入参数为某个对象这种情况,Swagger 是什么样子呢?我们再写一个接口。

@PostMapping("/insert")
    @ApiOperation(value = "添加用户信息")
    public JsonResult<Void> insertUser(@RequestBody @ApiParam(value = "用户信息") User user) {
        // 处理添加逻辑
        return new JsonResult<>();
    }

重启项目,在浏览器中输入 localhost:8080/swagger-ui.html 看一下效果:

5. 总结

OK,本节课详细分析了 Swagger 的优点,以及 Spring Boot 如何集成 Swagger2,包括配置,相关注解的讲解,涉及到了实体类和接口类,以及如何使用。最后通过页面测试,体验了 Swagger 的强大之处,基本上是每个项目组中必备的工具之一,所以要掌握该工具的使用,也不难。

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

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

相关文章

Redux toolkit

Redux 是 JavaScript 应用的状态容器&#xff0c;提供可预测的状态管理。 Redux Toolkit 是官方推荐的编写 Redux 逻辑的方法 入门 Redux | Redux 中文官网 本案例是一个加&#xff0c;减的计算器&#xff0c;从零到壹 1、创建一个react的项目 Create-react-app react-too…

MybatisX快速生成增删改查

MybatisX快速生成增删改查 MybatisX 是一款基于 IDEA 的快速开发插件&#xff0c;方便在使用mybatis以及mybatis-plus开始时简化繁琐的重复操作&#xff0c;提高开发速率。 注意&#xff1a;idea得用最新的版本才能生效一些功能&#xff0c;我用的是2021.3版本的 1 安装 file …

【Unity VR开发】结合VRTK4.0:直线

桃花坞里桃花庵&#xff0c;桃花庵里桃花仙。桃花仙人种桃树&#xff0c;又折桃花当酒钱。 酒醒只在花前坐&#xff0c;酒醉还来花下眠。半醉半醒日复日&#xff0c;花落花开年复年。 但愿老死花酒间&#xff0c;不愿鞠躬车马前。车尘马足富者趣&#xff0c;酒盏花枝贫者缘。…

新C++(7):多态那些事儿_上

"也应该歌颂赞美那株鲜红的玫瑰。"一、回顾多态(1)什么是多态呢在编程语言和类型轮中&#xff0c;多态&#xff08;英语&#xff1a;polymorphism&#xff09;指为不同数据类型的实体提供统一的接口。多态类型(英语:polymorphic type&#xff09;可以将自身所支持的操…

FreeRTOS任务通知实验

从 V8.2.0 版本开始&#xff0c;FreeRTOS 新增了任务通知这个功能&#xff0c;可以使用任务通 知来代替信号量、消息队列、事件组等这些东西。使用任务通知的话效率会更高。 本章要实现的功能是&#xff1a;使用任务通知方式实现消息队列、二值信号量、计数信号 量、事件标记功…

极狐场景化造车理念受热捧,北汽蓝谷构建未来5年核心竞争力

近日&#xff0c;极狐汽车以“一米视角”为设计思考的原点&#xff0c;围绕亲子出行的全场景&#xff0c;推出全球首款智能亲子车——考拉。作为北汽蓝谷场景化造车的首款产品&#xff0c;极狐汽车考拉无疑是继高阶智能驾驶标杆产品HI之后的又一次先行探索&#xff0c;致力于卡…

1月VR大数据:Quest 2增长2.91%,HTC份额跌至10%以下

Hello大家好&#xff0c;每月一期的VR内容/硬件大数据统计又和大家见面了。 想了解VR软硬件行情么&#xff1f;关注这里就对了。我们会统计Steam平台的用户及内容等数据&#xff0c;每月初准时为你推送&#xff0c;不要错过喔&#xff01;本数据报告包含&#xff1a;Steam VR硬…

初识C语言(对c语言的简单介绍)

初识C语言什么是C语言&#xff1f;第一个C语言程序数据类型类型的使用&#xff1a;变量、常量定义变量的方法变量的分类变量的使用变量的作用域和生命周期常量字符串转义字符注释字符串转义字符注释选择语句循环语句函数数组数组定义数组的使用操作符常见关键字关键字 typedef关…

MySQL进阶篇之SQL优化

03、SQL优化 3.1、插入数据 1、insert优化 批量插入 INSERT INTO 表名 (字段1,字段2,...) VALUES (值1,值2,...),(值1,值2,...),(值1,值2,...);INSERT INTO 表名 VALUES (值1,值2,...),(值1,值2,...),(值1,值2,...);手动提交事务 start transaction; INSERT INTO 表名 (字段1…

【SQL 审核查询平台】Archery使用介绍

Archery 读作&#xff1a;[ˈɑːrtʃəri] Archery目录界面截图功能清单依赖清单框架前端组件服务端部署准备运行配置启动访问修改配置项基础设置添加实例添加资源组资源组关联用户/实例添加权限组用户关联权限组/权限设置工单上线和查询的审批流程设置默认资源组和默认权限组…

数组的几种常见方法及其返回值

push()&#xff1a;向数组的末尾添加一个或多个元素&#xff1b;返回的是数组的新长度。unshift()&#xff1a;向数组的开头添加一个或多个元素&#xff1b;返回的是数组的新长度。shift()&#xff1a;删除数组的第一个元素&#xff0c;并返回被删除的&#xff08;即第一个元素…

品牌社交营销链路 | 小红书数据分析网站

【导语】 2022年&#xff0c;小红书品牌推广竞争愈演愈烈&#xff0c;从小红书用户画像分析&#xff0c;到抢占小红书关键词排名&#xff0c;营销动作内卷升级&#xff0c;那么在2023的新篇章&#xff0c;如何打通社交种草的链路呢&#xff1f; 1、运营企业账号&#xff0c;建立…

MQTT 代理助力ECARX实现汽车智能互联

一、应用背景 ECARX是中国汽车制造商吉利旗下的一家科技创新企业&#xff0c;致力于持续打造行业领先的智能网联生态开放平台&#xff0c;全面为车企赋能&#xff0c;创造更智能、更安全的出行体验&#xff0c;为智能互联汽车提供智能解决方案。 ECARX主要业务包括吉利汽车的…

让Apache Beam在GCP Cloud Dataflow上跑起来

简介 在文章《Apache Beam入门及Java SDK开发初体验》中大概讲了Apapche Beam的简单概念和本地运行&#xff0c;本文将讲解如何把代码运行在GCP Cloud Dataflow上。 本地运行 通过maven命令来创建项目&#xff1a; mvn archetype:generate \-DarchetypeGroupIdorg.apache.b…

Swift 新 async/await 同步机制小技巧:消除“多余”的 await 关键字

概览 在使用多个Actor 共同实现同步功能的时候&#xff0c;我们往往会看到如下使用场景&#xff1a; Actor A 必须在主线程上运行&#xff0c;Actor B可以在任意线程上运行&#xff0c;但需要适时的调用 Actor A 中的方法。 在这种情况下&#xff0c;我们会遇到如下代码&#…

从移动激光扫描数据中自动提取单棵树的双重生长方法

论文题目&#xff1a;A dual growing method for the automatic extraction of individual trees from mobile laser scanning data Abstract 在城市场景的杂乱点云中&#xff0c;街道树木与其他物体交织在一起&#xff0c;阻碍了对单个树木的自动提取。根据树木的一般构成&a…

React:安装配置使用scss

目录 前言&#xff1a; 1.暴露隐藏的webpack配置&#xff1b; 2.安装sass的相关包&#xff1b; 3.项目中新建一些scss文件&#xff1b; 4.在config文件夹中找到webpack.config.js文件&#xff0c;进行配置&#xff1b; 5.测试使用&#xff1b; 前言&#xff1a; 项目采用…

Python之Pandas的常用技能【写入数据】

1、背景&#xff1a; 最近在工作中遇到越来越多的的使用pandas或者python来处里写入操作&#xff0c;尤其是对excel文件或者csv文件的操作更是常见&#xff0c;这里将写入操作总结如下&#xff0c;方便记忆&#xff0c;也分享给大家&#xff0c;希望对阅读者能够有所帮助 2、…

nvdiffrec:Extracting Triangular 3D Models, Materials, and Lighting From Images

论文主页 https://nvlabs.github.io/nvdiffrec/git主页 https://github.com/NVlabs/nvdiffrec新闻报道 https://redian.news/wxnews/36324YuQiao0303 读后感 https://blog.csdn.net/qq_34342853/article/details/125622816b站演示效果视频 https://www.bilibili.com/video/BV1P…

8天获offer|祝贺信息技术老师获CSC资助赴意大利访学

I老师拟申报CSC青年骨干教师项目&#xff0c;指定欧洲学校&#xff0c;且要求半个月内获得邀请函。我们8天就取得了意大利帕多瓦大学的offer&#xff0c;研究方向完全相符&#xff0c;因而顺利通过了CSC审批。后经繁琐的手续&#xff0c;I老师最终获得签证&#xff0c;如期出国…