- 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的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
SpringBoot-Admin 服务监控 简单介绍 Spring Boot Actuator 是 Spring Boot 自带的一个功能模块, 提供了一组已经开箱即用的生产环境下常用
我想查找通过关键字匹配字段 nameEnglish 或 nameChinese 的模型列表。我花了一个多小时谷歌搜索但我做不到。请帮忙。 Springboot Mongo 入门示例 https://s
(请注意:在调查 this issue 时,我更好地发现了我在此处介绍的问题根源) 我对 Hibernate 和 SpringBoot 非常陌生。我的项目涉及一个搜索引擎,其中索引(javafx 客户
我最近有一个 Web 应用程序从 springboot 升级到 springboot 2。当我将其部署到 Tomcat 8 时,它似乎启动了,但没有完全启动。 在 localhost.2019-09-
我是 Spring boot 的新手...我在运行 Controller 时遇到问题, Description: Field todoService in com.springboot.todoCon
我有一个SpringBoot应用程序,它使用以下配置与PostgreSQL通信,通过AWS Beanstrik部署:。在我将AWS Aurora证书更新为rds-ca-ecc384-g1之前,一切都很
实在是不知道标题写什么了 可以在评论区给个建议哈哈哈哈 先用这个作为标题吧 尝试使用 国内给出的 AI 大模型做出一个 可以和 AI 对话的 网站出来 使用 智普AI 只能 在控制
一、介绍 在实际的软件系统开发过程中,由于业务的需求,在代码层面实现数据的脱敏还是远远不够的,往往还需要在数据库层面针对某些关键性的敏感信息,例如:身份证号、银行卡号、手机号、工资等信息进行加密存储
Selenium Selenium是一个用于Web应用程序自动化测试的开源工具套件。它主要用于以下目的: 浏览器自动化:Selenium能够模拟真实用户在不同浏览器(如Chrome、Fire
一、简介 在实际的项目开发过程中,经常需要用到邮件通知功能。例如,通过邮箱注册,邮箱找回密码,邮箱推送报表等等,实际的应用场景非常的多。 早期的时候,为了能实现邮件的自动发送功能,通常会使用 Ja
SpringBoot:基于redis自定义注解实现后端接口防重复提交校验 一、添加依赖 org.springframework.boot spring
SpringBoot:使用Jackson完成全局序列化配置 一、测试准备 com.fasterxml.jackson.core jackson-cor
springboot:整合rocketmq 一、简易消息操作 生产者整合mq 导入依赖 org.springframework.boot
springboot:常用注解 一、spring常用注解 包扫描+组件标注注解 @Component:泛指各种组件 @Controller、@Service、@Repository都可以称为@Comp
我们经常需要在两个系统之间进行一些数据的交互,这时候我们就需要开发数据交互接口。 一般来说,遇到比较多的接口有HTTP接口、WebService接口、FTP文件传输。今天我要来学习一下在SpringB
背景 近期项目上线,甲方要求通过安全检测才能进行验收,故针对扫描结果对系统进行了一系列的安全加固,本文对一些常见的安全问题及防护策略进行介绍,提供对应的解决方案 跨站脚本攻击 XSS常发生于论坛评论等
1.排除 Spring-boot-starter 默认的日志配置 将原本的 spring-boot-starter 改为 org.springframework.boot
springboot:解决跨域问题 一、跨域简介 URL的组成: // 协议 + 域名(子域名 + 主域名) + 端口号 + 资源地址 http://www.baidu.com:8080/ 只要协
一、自定义Starter 的思路: 创建一个Maven工程,创建三个模块 一个模块为demo-app,一个模块为demo-module,一个模块为demo-module-springboot-star
1.pom.xml 4.0.0 org.springframework.boot spring-boot-starter-parent
我是一名优秀的程序员,十分优秀!