Spring Boot中使用Swagger CodeGen生成REST client
文章目录
- 什么是Open API规范定义文件呢?
- 生成Rest Client
- 在Spring Boot中使用
- API Client 配置
- 使用Maven plugin
- 在线生成API
Spring Boot中使用Swagger CodeGen生成REST client
Swagger是一个非常好用的API工具,我们会使用Swagger来暴露API给外界测试,那么有没有简单的办法来生成对应的调client呢?
Swagger CodeGen是一个REST 客户端生成工具,它可以从Open API的规范定义文件中生成对应的REST Client代码。本文我们将会举例说明如何通过OpenAPI 规范定义文件自动生成REST Client。
什么是Open API规范定义文件呢?
OpenAPI规范(OAS)为RESTful API定义了一个与语言无关的标准接口,使人类和计算机都可以发现和理解服务的功能,而无需访问源代码,文档或通过网络流量检查。 正确定义后,使用者可以使用最少的实现逻辑来理解远程服务并与之交互。
然后,文档生成工具可以使用OpenAPI定义来显示API,代码生成工具可以使用各种编程语言,测试工具和许多其他用例来生成服务器和客户端。
值得一提的是OpenAPI规范最早也是Swagger提出来的,后面被捐赠给了社区。
推荐的OpenAPI 文档名字通常为openapi.json 或者 openapi.yaml。
我们看一个swagger自带的 petstore open api 例子: https://petstore.swagger.io/v2/swagger.json
{"swagger": "2.0","info": {"description": "This is a sample server Petstore server. You can find out more about Swagger at [http://swagger.io](http://swagger.io) or on [irc.freenode.net, #swagger](http://swagger.io/irc/). For this sample, you can use the api key `special-key` to test the authorization filters.","version": "1.0.3","title": "Swagger Petstore","termsOfService": "http://swagger.io/terms/","contact": {"email": "apiteam@swagger.io"},"license": {"name": "Apache 2.0","url": "http://www.apache.org/licenses/LICENSE-2.0.html"}},"host": "petstore.swagger.io","basePath": "/v2","tags": [...],"schemes": ["https","http"],"paths": {..."definitions": {...},"externalDocs": {"description": "Find out more about Swagger","url": "http://swagger.io"}
}
我们可以看到在这个open API 定义文件里面包含了我们在swagger界面上看到的一切,paths,definitions等。
生成Rest Client
有了Open Api定义文件之后,我们就可以使用 swagger-codegen-cli 来生成对应的rest client文件了。
目前为止,最新的swagger-codegen-cli版本是2.4.12, 我们可以从这里下载 https://search.maven.org/classic/remotecontent?filepath=io/swagger/swagger-codegen-cli/2.4.12/swagger-codegen-cli-2.4.12.jar。
下载到本地之后,我们可以通过如下命令来生成rest client:
java -jar swagger-codegen-cli-2.4.12.jar generate \-i http://petstore.swagger.io/v2/swagger.json \--api-package com.flydean.client.api \--model-package com.flydean.client.model \--invoker-package com.flydean.client.invoker \--group-id com.flydean \--artifact-id springboot-generate-restclient \--artifact-version 0.0.1-SNAPSHOT \-l java \--library resttemplate \-o springboot-generate-restclient
上述的参数包含:
- -i 指定了open api 定义文件的地址
- –api-package, –model-package, –invoker-package 指定了生成文件的package
- –group-id, –artifact-id, –artifact-version 指定生成的maven 项目的属性
- -l 指明生成的代码编程语言
- –library 指定了实际的实现框架
- -o 指定输出文件目录
Swagger Codegen 支持如下的Java 库:
- jersey1 – Jersey1 + Jackson
- jersey2 – Jersey2 + Jackson
- feign – OpenFeign + Jackson
- okhttp-gson – OkHttp + Gson
- retrofit (Obsolete) – Retrofit1/OkHttp + Gson
- retrofit2 – Retrofit2/OkHttp + Gson
- rest-template – Spring RestTemplate + Jackson
- rest-easy – Resteasy + Jackson
在Spring Boot中使用
我们把生成的代码拷贝到我们的Spring Boot项目中。然后通过下面的代码来启动应用程序:
@SpringBootApplication
public class GenerateClientApp {public static void main(String[] args) {SpringApplication.run(GenerateClientApp.class, args);}@Beanpublic RestTemplate restTemplate(RestTemplateBuilder builder) {return builder.build();}}
我们再定义一个controller:
@RestController
public class PetController {@Autowiredprivate PetApi petApi;@GetMapping("/api/findAvailablePets")public List<Pet> findAvailablePets() {return petApi.findPetsByStatus(Arrays.asList("available"));}
}
现在通过curl localhost:8080/api/findAvailablePets就可以远程调用http://petstore.swagger.io/v2/swagger.json 里面暴露的接口了。
API Client 配置
默认情况下ApiClient是默认的不需要认证的,如果需要认证,可以自定义ApiClient如下:
@Bean
public ApiClient apiClient() {ApiClient apiClient = new ApiClient();OAuth petStoreAuth = (OAuth) apiClient.getAuthentication("petstore_auth");petStoreAuth.setAccessToken("special-key");return apiClient;
}
使用Maven plugin
除了使用cli命令之外,我们还可以在pom中添加plugin来实现这个功能:
<build><plugins><plugin><groupId>io.swagger</groupId><artifactId>swagger-codegen-maven-plugin</artifactId><version>2.4.12</version><executions><execution><goals><goal>generate</goal></goals><configuration><inputSpec>swagger.json</inputSpec><language>java</language><library>resttemplate</library></configuration></execution></executions></plugin></plugins></build>
在线生成API
我们可以通过http://generator.swagger.io来在线生成API代码:
curl -X POST -H "content-type:application/json" \
-d '{"swaggerUrl":"http://petstore.swagger.io/v2/swagger.json"}' \
http://generator.swagger.io/api/gen/clients/java
该命令会返回一个包含代码的zip包供你下载。
本文的例子可以参考 https://github.com/ddean2009/learn-springboot2/tree/master/springboot-generate-restclient
更多精彩内容且看:
- 区块链从入门到放弃系列教程-涵盖密码学,超级账本,以太坊,Libra,比特币等持续更新
- Spring Boot 2.X系列教程:七天从无到有掌握Spring Boot-持续更新
- Spring 5.X系列教程:满足你对Spring5的一切想象-持续更新
- java程序员从小工到专家成神之路(2020版)-持续更新中,附详细文章教程
更多教程请参考 flydean的博客
Spring Boot中使用Swagger CodeGen生成REST client相关推荐
- 在spring boot中集成Swagger
Swagger 在spring boot中集成Swagger 新建一个swagger项目 maven依赖 <!-- https://mvnrepository.com/artifact/io.s ...
- spring boot中利用mybatis-generator插件生成代码
使用Idea在spring boot中集成mybatis-generator,自动生成mapper.xml model dao 文件 一.配置 pom.xml 在pom.xml的<plugi ...
- Spring Boot中使用Swagger2构建RESTful APIs
关于 Swagger Swagger能成为最受欢迎的REST APIs文档生成工具之一,有以下几个原因: Swagger 可以生成一个具有互动性的API控制台,开发者可以用来快速学习和尝试API. S ...
- Spring Boot中的微信支付(小程序)
前言 微信支付是企业级项目中经常使用到的功能,作为后端开发人员,完整地掌握该技术是十分有必要的. 一.申请流程和步骤 图1-1 注册微信支付账号 获取微信小程序APPID 获取微信商家的商户ID 获取 ...
- Spring Boot中使用Swagger3.0.0版本构建RESTful APIs
文章目录 一.项目描述 二.简介 三.Swagger2.X和Swagger3.0.0 的对比 1)SpringFox 2.x 发布 2)SpringFox 3.0.0 发布 3)swagger3.0 ...
- Spring Boot 中使用 MongoDB 增删改查
本文快速入门,MongoDB 结合SpringBoot starter-data-mongodb 进行增删改查 1.什么是MongoDB ? MongoDB 是由C++语言编写的,是一个基于分布式文件 ...
- Spring Boot中如何扩展XML请求和响应的支持
在之前的所有Spring Boot教程中,我们都只提到和用到了针对HTML和JSON格式的请求与响应处理.那么对于XML格式的请求要如何快速的在Controller中包装成对象,以及如何以XML的格式 ...
- 如何在Spring Boot中玩转智能合约【修订版】
本文是由链博科技 ChainBoard.IO 为大家带来的web3j 对智能合约的调用.让 java 程序可以和我们的智能合约愉快的交互起来~ 一. 什么是 web3j web3j是一个高度模块化.响 ...
- 如何在Spring Boot中玩转智能合约
本文是由链博科技 ChainBoard.IO 为大家带来的web3j 对智能合约的调用.让 java 程序可以和我们的智能合约愉快的交互起来~ 一.什么是 web3j web3j是一个高度模块化.响应 ...
最新文章
- CSS 选择器:BeautifulSoup4解析器
- Spring消息之WebSocket
- TSV_TNEW_PAGE_ALLOC_FAILED
- 如何快速将Android库发布到JCenter
- 11 步教你选择最稳定的 MySQL 版本
- 帆软报表调用python脚本_帆软报表(finereport)实现自动滚屏效果
- KEIL STC 仿真
- 关于数据分析岗位的工作思考
- JAVA钓鱼游戏_java如何实现纸牌游戏之小猫钓鱼算法
- 51单片机带闹钟c语言程序,51单片机编写的闹钟程序
- Giving an effective oral presentation at university(The Hong Kong Polytechnic University 香港理工大学)
- listview qt 选中内容_演练: 操作Qt应用中的QListView
- tftp和xinetd服务器的配置
- 全球与中国氧化PAN纤维市场销售现状与投资前景预测报告2022~2027年
- 若某非空二叉树的先序序列和后序序列正好相反,或者正好相同,则二叉树形态是怎么样的?
- 编译与调试以及makefile
- vue项目前端导出xlsx表格带边框
- “我们的开源项目”发起人、息壤开源社区共同创始人——程旭文专访
- 基于plc的污水处理,组态王动画仿真,带PLC源代码,组态王源代码,图纸,IO地址分配
- Matlab实现螺纹识别
热门文章
- qpython怎么添加pip_Q: 在Windows上安装Python 2.7的pyHook和pip
- CSP-2019总结
- cocos2d-x游戏实例(24)-简易动作游戏(2)
- SQLLite (三):sqlite3_get_table,sqlite3_free_table
- Kafka分区分配策略(2)——RoundRobinAssignor和StickyAssignor
- 模拟RabbitMQ网络分区
- 构建DRM系统的重要基石——EME、CDM、AES、CENC和密钥
- VVC专利池最新进展:MC-IF正在召集专利拥有者
- LiveVideoStack线上分享第四季(十):图像视频降噪的现在与未来——从经典方法到深度学习...
- 卡牌特效: svg不规则倒计时动效