- ubuntu12.04环境下使用kvm ioctl接口实现最简单的虚拟机
- Ubuntu 通过无线网络安装Ubuntu Server启动系统后连接无线网络的方法
- 在Ubuntu上搭建网桥的方法
- ubuntu 虚拟机上网方式及相关配置详解
CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.
这篇CFSDN的博客文章SpringBoot整合OpenApi的实践由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.
网上经常可以看到OpenAPI和Swagger相关的词汇,总是傻傻分不清,这里先简单介绍一下Swagger个OpenAPI的联系.
OpenAPI是规范;Swagger是实现规范的工具.
OpenAPI 3.0是该规范的第一个正式版本,因为它是由SmartBear Software捐赠给OpenAPI Initiative,并在2015年从Swagger规范重命名为OpenAPI规范.
OpenAPI是规范的正式名称。该规范的开发是由OpenAPI Initiative推动的,该倡议涉及更多来自技术领域不同领域的30个组织-包括Microsoft,Google,IBM和CapitalOne.
领导Swagger工具开发的公司Smartbear Software也是OpenAPI Initiative的成员,帮助领导了规范的发展.
确保SpringBoot版本在2.x级以上.
引入OpenApi依赖 。
1
2
3
4
5
|
<
dependency
>
<
groupId
>io.springfox</
groupId
>
<
artifactId
>springfox-boot-starter</
artifactId
>
<
version
>3.0.0</
version
>
</
dependency
>
|
编写配置类,并手动装配@EnableOpenApi 。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
|
@EnableOpenApi
@Configuration
public
class
OpenApiConfiguration {
@Bean
public
Docket createRestApi() {
return
new
Docket(DocumentationType.OAS_30)
.apiInfo(apiInfo())
.select()
.apis(apis())
.paths(PathSelectors.any())
.build()
.enable(
true
);
}
private
ApiInfo apiInfo() {
return
new
ApiInfoBuilder()
.title(
"项目名称"
)
.description(
"项目描述"
)
.termsOfServiceUrl(
"项目地址"
)
.version(
"API版本"
)
.license(
"公司的license"
)
.licenseUrl(
"公司的license地址"
)
.build();
}
private
Predicate<RequestHandler> apis() {
return
RequestHandlerSelectors.basePackage(
"controller包的路径"
);
}
}
|
到这里SpringBoot就整合OpenAPI成功了。需要一提的是,OpenAPI不仅可以通过扫描controller包的路径生成OpenAPI,也可以通过扫描@ApiOperation来生成OpenAPI.
上面的示例通过硬编码的形式,所以无法进行代码的复用,而且每次更新配置的时候,都需要更改代码,比如我们的项目在开发或者测试环境时,我们希望能正常使用OpenAPI但是在生产环境需要禁用OpenAPI。 在工程学的角度,常用的做法是尽量通过更改配置的形式,问不是更改代码。基于此,我们可以借助SpringBoot的配置功能,对上述代码进行改造.
新增OpenApi配置类 。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
|
@Data
@Component
@ConfigurationProperties
(prefix =
"example.web.swagger"
)
public
class
SwaggerProperties {
/**
* 是否swagger3启用,默认不启用
*/
private
Boolean enable =
false
;
/**
* 扫描包路径,可以不指定,系统会通过自动扫描{@link io.swagger.annotations.ApiOperation}
*/
private
String basePackage;
/**
* 标题
*/
private
String title;
/**
* 应用描述
*/
private
String description;
/**
* 服务地址
*/
private
String serviceUrl;
/**
* 版本,默认V1.0.0
*/
private
String version =
"V1.0.0"
;
/**
* license
*/
private
String license;
/**
* licenseUrl
*/
private
String licenseUrl;
}
|
配置替换硬编码 。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
|
@Slf4j
@Configuration
@EnableOpenApi
public
class
OpenApiConfiguration {
@Resource
private
SwaggerProperties swaggerProperties;
@Bean
public
Docket createRestApi() {
return
new
Docket(DocumentationType.OAS_30)
.apiInfo(apiInfo())
.select()
.apis(apis())
.paths(PathSelectors.any())
.build()
.enable(isEnable());
}
private
Boolean isEnable() {
Boolean enable = swaggerProperties.getEnable();
if
(enable) {
log.info(
"\nEnable Swagger3..."
);
}
return
enable;
}
private
ApiInfo apiInfo() {
return
new
ApiInfoBuilder()
.title(swaggerProperties.getTitle())
.description(swaggerProperties.getDescription())
.termsOfServiceUrl(swaggerProperties.getServiceUrl())
.version(swaggerProperties.getVersion())
.license(swaggerProperties.getLicense())
.licenseUrl(swaggerProperties.getLicenseUrl())
.build();
}
private
Predicate<RequestHandler> apis() {
String basePackage = swaggerProperties.getBasePackage();
// 默认通过扫描`ApiOperation`如果配置了包扫描路径,使用配置的包扫描路径
return
Strings.isNullOrEmpty(basePackage) ? withMethodAnnotation(ApiOperation.
class
) : basePackage(basePackage);
}
}
|
通过这样的简单改造后,我们就可以完全通过配置文件的形式配置OpenApi 。
示例配置 。
1
2
3
4
5
6
7
|
example:
web:
swagger:
enable: true
title: 演示OpenAPI
description: 演示OpenAPI
base-package: com.example.controller
|
这里通过使用代码演示注解的使用 。
需要在用户的VO实体类标注@ApiModel并说明该类的作用, 属性上通过@ApiModelProperty解析属性的作用,并通过required值约定该属性是否可以为空 可以通过example说明该属性的用例值 。
1
2
3
4
5
6
7
8
9
10
11
12
13
|
@Data
@ApiModel
(
"用户信息"
)
public
class
UserVO {
@ApiModelProperty
(value =
"用户id"
, required =
true
, example =
"asdf124"
)
private
String userId;
@ApiModelProperty
(value =
"用户名称"
, required =
true
)
private
String username;
@ApiModelProperty
(value =
"用户年龄"
)
private
Integer age;
}
|
这里主要通过用户注册和用户信息接口演示.
在配上通过@Api标注该类的功能;通过@ApiOperation说明接口的功能,如果传入的数据不是实体类,而是一个基本数据类型,可以通过@ApiParam解释参数的作用 。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
@RequestMapping
(
"user"
)
@RestController
@Api
(tags =
"用户中心"
)
public
class
UserController {
@ApiOperation
(
"用户注册"
)
@PostMapping
public
R<Void> register(
@RequestBody
UserVO userVO) {
// todo
return
R.ok();
}
@ApiOperation
(
"通过Id获取用户信息"
)
@GetMapping
public
R<UserVO> userInfo(
@ApiParam
(value =
"用户id"
,required =
true
)
@RequestParam
String userId) {
// todo
return
R.ok(
new
UserVO());
}
}
|
启动项目,通过访问IP:PORT/swagger-ui/index.html即可看到swagger界面 。
到此这篇关于SpringBoot整合OpenApi的实践的文章就介绍到这了,更多相关SpringBoot整合OpenApi内容请搜索我以前的文章或继续浏览下面的相关文章希望大家以后多多支持我! 。
原文链接:https://juejin.cn/post/7000351567677227045 。
最后此篇关于SpringBoot整合OpenApi的实践的文章就讲到这里了,如果你想了解更多关于SpringBoot整合OpenApi的实践的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
前言 这个东西有啥用,好玩? 确实, 好玩归好玩,其实很有使用场景。 可以自己选则一些业务节点触发这个机器人助手的消息推送; 简单举例: 有人给你的系统留下反馈意见了,推送到运营群去; 2.项目部署成
1. JWT 简介 JSON Web Token(JWT) 是一个开放标准(RFC 7519),它定义了一种紧凑的、自包含的方式,用于作为 JSON 对象在各方之间安全地传输信息。该信息可以被验证和信
我的页面上有多个 ajax 调用,我想将它们合并为一个函数。 目前我在几个地方都有这种类型的功能: function AjaxCallOne () { //do something $.ajax(
我的 Facebook 集成基本上可以在我的应用程序中运行:出现 Facebook 对话框,用户可以选择“允许”或“不允许”。但是,我不明白 API 是如何工作的!我有一个使用此代码的 Activit
我必须将文件夹结构从我的应用程序共享到 OneDrive。 我已经检查了一个驱动器的 sdk,但在那个 sdk 中只能共享文件而不是文件夹,并且没有在该 sdk 中创建文件夹的选项 https://g
我是支付网关集成方面的新手。我必须在我的项目 (CORE PHP) 中集成 CCAvenue 支付网关集成。但是我不知道如何为开发人员测试创建商户帐户,如何获取商户 key 等。我已经进行了研发,但是
我正在尝试将“社交选项”集成到我的应用程序中。 我有 iOS6,但我的想法是有一个适用于 iOS5 的应用程序。使用 Twitter 框架非常简单,并且可以在 r.0 版本和 6.0 版本的设备上运行
我正在尝试将 flurryAds 集成到我的 iPhone 应用程序中,但我无法做到这一点。我导入名为 的 .h 文件 #import "Flurry.h" #import "FlurryAds.h"
我正在尝试在我的网站中实现类似 facebook 的按钮和评论,但我在 IE7 中遇到了评论框问题。 COMMENT USING 下拉框不知何故没有显示其他可用选项。这是我用来实现它的代码片段:
关闭。这个问题是off-topic .它目前不接受答案。 想改进这个问题吗? Update the question所以它是on-topic用于堆栈溢出。 关闭 11 年前。 Improve th
我正在使用 SOAP API 进行 PayPal 集成(Express Checkout)。在 DoExpressCheckout 调用后,我调用 GetExpressCheckoutDetails。
我正在尝试将 paypal 作为支付网关之一集成到我的应用程序中,但在我点击支付按钮后它会返回以下错误。 错误 java.lang.RuntimeException:无法使用 Intent { cmp
我目前正在尝试将 paypal 结账与我们的在线商店集成。我们正在针对 Sandbox 进行测试。除了 IPN(即时付款通知)之外的所有内容都有效。 我们阅读了很多有关 Paypal 更改其安全模型的
我正在开发一个 android 应用程序,我想在其中集成 facebook 之类的。我正在浏览链接 http://developers.facebook.com/docs/guides/mobile/
所以我正在尝试构建一个集成了 FitBit 的 iOS 应用程序 (Swift 2)。 一旦用户打开“步行”页面,用户应该能够看到他每天的步数。 理想情况下,我们不希望每个用户都注册到 FitBit。
我是集成投递箱的新手,但我不太确定如何生成调用以获取请求 token secret 。 https://www.dropbox.com/developers/reference/api#request
我已经成功集成了 PayPal。一切正常。但我希望我的表格在成功付款后重定向到我的网站。另一个问题:如何从 PayPal 得到回应?这是我的 Paypal 表格。谢谢。 `
我在我的 Android 应用程序中集成了 Paypal 。我有一个主要 Activity - 和关于 Activity ,我在其中显示 Paypal 按钮。关于从主 Activity 访问的 Act
前言: 小编引入的图片和文字描述都是来自于尚硅谷的视频讲解,在此感谢尚硅谷的老师,同时也结合 seata文档官方文档进行整合 项目地址(gitee): https://gitee.com/qine
目录 1. demo project 1.1 接口准备 1.2 配置准备 2. docker 开启远程连接
我是一名优秀的程序员,十分优秀!