最新要闻
- 迷惑!大妈凌晨骑车撞上路边停放车辆:怒斥司机不开车灯
- 黄桃罐头遭疯抢 厂家实诚回应“没药效” 网友调侃:你不懂
- 环球观焦点:曝Redmi K60系列依然将采用塑料支架 为了性价比?
- 注意!鲍鱼被列入濒危物种红色名录:20种或灭绝
- 10.3寸墨水屏!联想YOGA Paper墨水平板今日开售 3699元
- 梅西进4强 雷军点赞:阿根廷门将神了 太给力
- 全球微速讯:苹果要大赚!消息称iPhone 15又涨价 高端万元起:华为Mate60等跟涨吗
- 阿根廷点球大战淘汰荷兰:梅西点射破门 追平巴蒂纪录网友纷祝贺
- 国际领先!中国天眼获得银河系气体高清图像:揭露恒星诞生到消亡
- 世界热讯:巴西点球大战3-5克罗地亚!无缘四强 内马尔赛后痛哭
- 最轻折叠屏OPPO Find N2来了!朱海舟:上手后你会WOW一下
- 当前热点-负债585.68亿、工资发不出:国美获黄光裕公司贷款1.5亿港元
- 天天快讯:NVIDIA力推的光追版《传送门》游戏被指代码糟糕:AMD显卡坑了
- 零百加速3.8秒马力暴躁 蔚来全系车型试驾会郑州站开启
- 当前观点:后矿难时代 显卡价格仍居高不下
- 天天快消息!布洛芬不用抢 中国产能全球第一:一家公司就够33亿人用
手机
iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?
警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案
- iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?
- 警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案
- 男子被关545天申国赔:获赔18万多 驳回精神抚慰金
- 3天内26名本土感染者,辽宁确诊人数已超安徽
- 广西柳州一男子因纠纷杀害三人后自首
- 洱海坠机4名机组人员被批准为烈士 数千干部群众悼念
家电
SpringBoot整合Swagger2在线文档
SpringBoot整合Swagger2在线文档
一 什么是swagger?
我们前面有讲到说开发时会创建Restful风格的API接口,供第三方或前端人员使用,那么前端人员在使用的过程中怎么知道有哪些接口呢。这个时候可以通过写接口文档来解决,但不同的程序员写出来的可能不一样,前端经常抱怨后端给的接口文档与实际情况不一致。后端又觉得编写及维护接口文档会耗费不少精力,经常来不及更新。无论是前端调用后端,还是后端调用后端,都期望有一个好的接口文档。如果能有工具帮我们能规范接口文档,最好能自动帮我们生成接口文档就好了。于是生成在线文档的工具就是 swagger就产生了。
1、什么是Swagger ?
Swagger是一款开源工具,依据OpenAPI规范(OpenAPI Specification,简称OAS)可以帮助你设计,构建,生成文档,调用REST APIs。
2、Swagger优点
1.号称世界上最流行的Api框架;2.RestFul Api 文档在线自动生成工具,Api文档与Api定义同步更新(写完代码文档就实时更新)3.可以直接运行,可以在线测试Api接口;4.支持多种语言(java,php等)
二 Springboot中怎么整合Swagger2
Swagger工具既然这么好用,那么我们就来看一下在SpringBoot中怎么整合Swagger。
(资料图)
Swagger的工具很多,但SpringBoot中整合Swagger主要是使用Swagger来构建强大的Restful文档。也就是里面的Swagger UI工具。
这里我们用的版本是Swagger2。
1.创建Springboot项目
选择web、 lombok、 mysql、spring data jpa 依赖 (也可以将spring data jpa 换成mybatis相关依赖)
项目创建成功后在pom文件中添加druid依赖包
完成后pom文件如下:
org.springframework.boot spring-boot-starter-data-jpa org.springframework.boot spring-boot-starter-web mysql mysql-connector-java 5.1.45 runtime com.alibaba druid-spring-boot-starter 1.1.10 org.projectlombok lombok true org.springframework.boot spring-boot-starter-tomcat provided org.springframework.boot spring-boot-starter-test test
添加数据库配置信息:
# 数据库的基本配置spring.datasource.driver-class-name=com.mysql.jdbc.Driverspring.datasource.username=rootspring.datasource.password=rootspring.datasource.url=jdbc:mysql://localhost:3306/boot1?characterEncoding=utf8&serverTimezone=GMT%2B8#配置连接池spring.datasource.type=com.alibaba.druid.pool.DruidDataSource# JPA配置spring.jpa.database=mysql# 是否在控制台打印SQLspring.jpa.show-sql=truespring.jpa.hibernate.ddl-auto=update# 指定默认的存储引擎为InnoDB,默认情况下,自动创建表的时候会使用 MyISAM 做表的引擎,# 如果配置了数据库方言为 MySQL57Dialect,则使用 InnoDB 做表的引擎。spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQL57Dialect
2.创建Restful风格的Api
结构图如下:
User类:
package com.example.swagger.pojo;import io.swagger.annotations.ApiModel;import lombok.AllArgsConstructor;import lombok.Data;import lombok.NoArgsConstructor;import javax.persistence.*;@Data@NoArgsConstructor@AllArgsConstructor@Entity@Table(name = "users")public class User { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private int id; private String uname; private int age;}
UserRepository类:
package com.example.swagger.dao;import com.example.swagger.pojo.User;import org.springframework.data.jpa.repository.JpaRepository;public interface UserRepository extends JpaRepository {}
这里省略了service层,直接在控制层里调用dao层
userController类:
package com.example.swagger.controller;import com.example.swagger.dao.UserRepository;import com.example.swagger.pojo.User;import com.example.swagger.util.Response;import com.example.swagger.util.ResponseResult;import io.swagger.annotations.Api;import io.swagger.annotations.ApiOperation;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.web.bind.annotation.GetMapping;import org.springframework.web.bind.annotation.PathVariable;import org.springframework.web.bind.annotation.PostMapping;import org.springframework.web.bind.annotation.RestController;import java.util.List;@RestControllerpublic class UserController { @Autowired private UserRepository userRepository; //查询所有 @GetMapping("/users") public ResponseResult> selectUsers() { List usersList= userRepository.findAll(); return Response.createOkResp(usersList); } //根据id查询 @GetMapping("/users/{id}") public ResponseResult selectUserById(@PathVariable(name = "id") int id) { User user= userRepository.findById(id).get(); return Response.createOkResp(user); } //添加 @PostMapping("/users") public ResponseResult addUser(User user) { userRepository.save(user); return Response.createOkResp("add success"); }}
3.添加Swagger2
3.1添加相关jar包
io.springfox springfox-swagger2 2.9.2 io.springfox springfox-swagger-ui 2.9.2
3.2 开启Swagger
swagger2 在springboot框架中使用需要 开启 @EnableSwagger2, 同时它支持自定义ui页面的一些信息
3.3 查看在线文档页
设置上面两个步骤后,打开 http://localhost:8080/swagger-ui.html
就可以看到接口信息
3.4 配置 Docket(可选)
我们把一个Docket类的一个实例添加到Spring的 BeanFactory中,以实现Swagger页面一些展示信息的定制化,例如作者,标题,描述等信息,也可以进行一些响应的配置项,例如扫描的Controller类基础包名等等。swagger会在初始化时从Spring的 BeanFactory中获取该实例(如果没有则使用默认的Docket实例),来完成初始化。
package com.example.swagger.config;import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Configuration;import springfox.documentation.builders.ApiInfoBuilder;import springfox.documentation.service.Contact;import springfox.documentation.spi.DocumentationType;import springfox.documentation.spring.web.plugins.Docket;@Configurationpublic class Swagger2 { @Bean public Docket docket() { return new Docket(DocumentationType.SWAGGER_2).apiInfo( new ApiInfoBuilder() .contact(new Contact("daimenglaoshi", "", "2398779723@qq.com")) .title("SpringBoot整合Swagger2") .build() ); }}
上面是对Docket进行一个非常简单的配置。效果如图
3.5 给Api接口添加注解
package com.example.swagger.controller;import com.example.swagger.dao.UserRepository;import com.example.swagger.pojo.User;import com.example.swagger.util.Response;import com.example.swagger.util.ResponseResult;import io.swagger.annotations.Api;import io.swagger.annotations.ApiImplicitParam;import io.swagger.annotations.ApiOperation;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.web.bind.annotation.GetMapping;import org.springframework.web.bind.annotation.PathVariable;import org.springframework.web.bind.annotation.PostMapping;import org.springframework.web.bind.annotation.RestController;import java.util.List;@RestController@Api(tags = "用户管理相关接口")public class UserController { @Autowired private UserRepository userRepository; //查询所有 @GetMapping("/users") @ApiOperation("查询所有用户的接口") public ResponseResult> selectUsers() { List usersList= userRepository.findAll(); return Response.createOkResp(usersList); } //根据id查询 @GetMapping("/users/{id}") @ApiOperation("根据id查询用户的接口") @ApiImplicitParam(name = "id", value = "用户id", required = true) public ResponseResult selectUserById(@PathVariable(name = "id") int id) { User user= userRepository.findById(id).get(); return Response.createOkResp(user); } //添加 @PostMapping("/users") @ApiOperation("添加用户") public ResponseResult addUser(User user) { userRepository.save(user); return Response.createOkResp("add success"); }}
这里边使用到了多个注解:@Api注解: 用来标记当前 Controller 的功能。@ApiOperation注解:用来标记一个方法的作用。@ApiImplicitParam注解:用来描述一个参数,可以配置参数的中文含义,也可以给参数设置默认值,这样在接口测试的时候可以避免手动输入。如果有多个参数,则需要使用多个 @ApiImplicitParam 注解来描述,多个 @ApiImplicitParam 注解需要放在一个 @ApiImplicitParams 注解中。需要注意的是,@ApiImplicitParam 注解中虽然可以指定参数是必填的,但是却不能代替 @RequestParam(required = true) ,前者的必填只是在 Swagger2 框架内必填,抛弃了 Swagger2 ,这个限制就没用了,所以假如开发者需要指定一个参数必填, @RequestParam(required = true) 注解还是不能省略。
3.6 参数是对象时
如果参数是一个对象(例如上文的添加接口),对于参数的描述也可以放在实体类中。
package com.example.swagger.pojo;import io.swagger.annotations.ApiModel;import io.swagger.annotations.ApiModelProperty;import lombok.AllArgsConstructor;import lombok.Data;import lombok.NoArgsConstructor;import javax.persistence.*;@Data@NoArgsConstructor@AllArgsConstructor@Entity@Table(name = "users")@ApiModel(description = "用户字段")public class User { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @ApiModelProperty(value = "用户id", name = "id", example = "1") private int id; @ApiModelProperty(value = "用户名", name = "uname", required = true, example = "daimenglaoshi") private String uname; @ApiModelProperty(value = "年龄", name = "age", example = "18") private int age;}
3.7 查看接口文档
http://localhost:8080/swagger-ui.html
·
SpringBoot整合Swagger2在线文档
迷惑!大妈凌晨骑车撞上路边停放车辆:怒斥司机不开车灯
黄桃罐头遭疯抢 厂家实诚回应“没药效” 网友调侃:你不懂
环球观焦点:曝Redmi K60系列依然将采用塑料支架 为了性价比?
注意!鲍鱼被列入濒危物种红色名录:20种或灭绝
10.3寸墨水屏!联想YOGA Paper墨水平板今日开售 3699元
天天热点评!环形队列、 条带环形队列 Striped-RingBuffer (史上最全)
梅西进4强 雷军点赞:阿根廷门将神了 太给力
全球微速讯:苹果要大赚!消息称iPhone 15又涨价 高端万元起:华为Mate60等跟涨吗
天天快资讯:深度学习基础课:最大池化层的前向传播推导
阿根廷点球大战淘汰荷兰:梅西点射破门 追平巴蒂纪录网友纷祝贺
国际领先!中国天眼获得银河系气体高清图像:揭露恒星诞生到消亡
世界热讯:巴西点球大战3-5克罗地亚!无缘四强 内马尔赛后痛哭
今日播报!Python装饰器与迭代器的学习教程
全球快资讯:你必须记住的30个CSS选择器?
最轻折叠屏OPPO Find N2来了!朱海舟:上手后你会WOW一下
当前热点-负债585.68亿、工资发不出:国美获黄光裕公司贷款1.5亿港元
天天快讯:NVIDIA力推的光追版《传送门》游戏被指代码糟糕:AMD显卡坑了
零百加速3.8秒马力暴躁 蔚来全系车型试驾会郑州站开启
世界短讯!MAUI新生5.2-样式外观:控件状态样式VisualState
python实现简单的商品数据管理系统
全球动态:asp.net core 基于Cookies的认证,自定义认证方案
全球新消息丨nginx中的正则表达式,location路径匹配规则和优先级
当前观点:后矿难时代 显卡价格仍居高不下
环球通讯!Java校验自定义枚举值
全球观天下!第一百一十一篇:基本引用类型Date
天天快消息!布洛芬不用抢 中国产能全球第一:一家公司就够33亿人用
天天短讯!BLOG-3总结
世界即时:突发!特斯拉中国工厂将停产Model Y
世界速看:一箱油能跑1200公里!比亚迪护卫舰07上市 20.28万起
当前通讯!雷军再谈小米13徕卡影像:非常自豪 你一定会被震撼到
【天天时快讯】我 一个程序员 靠玩ChatGPT年薪210万
世界看点:DX9性能大涨80% Intel驱动打鸡血原因找到了:做法很聪明
关注:南京一外卖小哥逆行撞劳斯莱斯 网友:几十年外卖白送了
今日快看!全球首架C919正式交付 中国搞这款大飞机有多不容易?
AI画作拍出110万高价创纪录!实测百度AI作画 效果惊艳
主人吃螺蛳粉:猫咪被臭到自闭
世界观速讯丨19岁少女无法走路 竟是因为它?国家早已明令禁止!
rsync远程同步
世界观焦点:AMD RX 7900 XTX渲染跑分性能曝光:感觉和RTX 4080两个时代
【热闻】国内电影票房已达285亿 《阿凡达2》成救命稻草:高价被指吃相难看
世界热推荐:为什么日本人更健康长寿?这12个“秘诀”值得借鉴
小米13 Pro长焦表现一绝:10cm至无穷远均可合焦
【报资讯】网传辽宁一有轨电车碾压电动自行车 官方回应:系剐蹭、人无碍
netmiko+textfsm自动统计交换机端口模块型号数量与闲置模块
【全球独家】【网关开发】4.Openresty 使用events插件进行事件通知
世界新消息丨蒟蒻颤抖:AI打信奥赛,三分之二赛题一遍过
【求助帖】从技术转为项目经理后,如何快速进入角色?
angr_ctf——从0学习angr(四):库操作和溢出漏洞利用
【世界速看料】新一代广汽本田皓影官图发布:大嘴变方嘴、可选7座
《原神》获TGA“玩家之声”奖!官方发800原石:全体都有
世界新动态:一部车骑10年!绿源推出INNO9-lite电动自行车:新国标 80km续航
天天快消息!NVIDIA发布527.56显卡驱动程序:DLSS 3游戏性能更强了
天天最资讯丨站起来了!哈弗H6插电混动版11月销量首超4000:直逼问界M5
焦点速递!CSS绝对定位7大应用场景实战案例分享
教你用CSS实现表单部件
环球热议:物联网平台在AIoT领域8大场景应用
东航官宣全球第一架C919商业首飞时间!这7大城市有福了
打爆丰田、本田混动SUV 比亚迪护卫舰07上市:20.28万起
天天微资讯!换代!AMD锐龙9 7950X3D来了:游戏性能比酷睿i9-13900K高出33%
【速看料】全国5G网络接入速率出炉:北京、上海都没抢到第一 移动最快
【世界新要闻】上线7年无敌手!《王者荣耀》11月吸金超13亿元:蝉联销冠
观点:MYSQL 1 DAY
世界微速讯:智能PDU,网络远程管理电源能耗提升配电效率
当前滚动:“云办公”如何用任务协同工具搞定项目和团队管理?
今日聚焦!SSM整合(spring-springmvc-mybatis)之CRUD
焦点日报:又拓新业务 比亚迪全新皮卡谍照曝光:DM混动没跑了
热点!不掉绒、无静电!史努比牛奶绒床品四件套大促:券后99元
天天快讯:一箭十四星 捷龙三号运载火箭首飞发射成功:海陆两用
焦点快播:QQ等级全球第一咋做到的?本人回应让网友羡慕:小时候家里开网吧
官方“挖墙脚”?网易《逆水寒》宣布推出“网易魔兽老兵服”
资讯:vscode使用chatGPT
全球滚动:我与 ChatGPT 讨论了面向对象语言 中,关于动态调用的问题
快播:第三方登录组件-JustAuth
【环球报资讯】BI智慧仓储,带你体验数字化仓储物流管理
环球今亮点!把ipa文件上传到App Store教程步骤
每日热讯!易基因:简化甲基化测序(RRBS)在植物生态表观基因组学中的机遇和局限|深度综述
当前聚焦:记.net framework php接口 返回数据格式问题 请求接口远程服务器返回错误: (500) 内部服务器错误
ChatGPT 大白话 SmartIDE
Zabbix与乐维监控对比分析(三)——对象管理篇
全球报道:专访|开源之夏最佳质量奖 Apache RocketMQ Committer 黄章衡
世界热消息:.net6制作让同事不能上网的arp欺骗工具
每日热门:如何利用 A/B 实验提升产品用户留存? 看字节实战案例给你答案!
chatGPT辣么火,你却不会注册
每日速讯:2022最新上传ipa到appstore的步骤说明
怎么在电脑上查看iPhone定位?iphone定位不准怎么校正?
怎么验证windows是不是正版?验证windows正版的方法有哪些?
光大银行信用卡额度一般是多少?光大银行信用卡怎么查询进度?
银行卡号泄露有危险吗?银行卡号泄露挂失有用吗?
空调怎么省电?空调省电的正确用法有哪些?
word文档怎么做思维导图?word文档怎么做小抄?
宏碁4750g怎么进入bios?宏碁4750G需要哪些驱动?
电视机顶盒怎么破解?电视机顶盒哪个牌子好用?
诺基亚710上市价格是多少?诺基亚710手机现在能用吗?
天然气热值是多少大卡?天然气热值换算表
环球热议:行为管理(锐捷业务软件篇)
焦点报道:直播间疯狂刷礼物可能是在洗钱:网络水军用千部手机给主播打赏 最多刷10亿元
国产操作系统deepin推送20.8版本:wine应用开启速度获得提升
联想PC小新桌面助手上线:实用性堪比手机控制中心
无叶无根无枝条的花你见过没?曾消失30年:开败后就变黑