【java框架】SpringBoot(3) -- SpringBoot集成Swagger2
1.SpringBoot web项目集成Swagger2
1.1.认识Swagger2
1.2.集成Swagger2初体验
①基于SpringBoot Initializr来创建一个web项目,并引入相关依赖:
<!--引入swagger2依赖及ui组件-->
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger2</artifactId>
<version>2.9.2</version>
</dependency>
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger-ui</artifactId>
<version>2.9.2</version>
</dependency>
依赖组件下载地址:https://mvnrepository.com/artifact/io.springfox
②创建Swagger2Config配置类,增加API应用配置信息:
//将此类交给Spring管理,表示一个配置类
@Configuration
//开启Swagger2
@EnableSwagger2
public class Swagger2Config {
/**
* 创建API应用
* apiInfo() 增加API相关信息
* 通过select()函数返回一个ApiSelectorBuilder实例,用来控制哪些接口暴露给Swagger来展现,
* 本例采用指定扫描的包路径来定义指定要建立API的目录
*
* @return 返回Swagger的Docket配置Bean实例
*/
@Bean
public Docket createRestApi(Environment environment) {
return new Docket(DocumentationType.SWAGGER_2)
.apiInfo(apiInfo())
.enable(true) //enable是否启动swagger,如果为False,则swagger不能在浏览器中访问
.select()
//指定API对象扫描哪个包下面的controller
//参数any():扫描全部; none():都不扫描
//withClassAnnotation:扫描类上的注解,参数是一个注解的反射对象
//withMethodAnnotation:扫描方法上的注解
.apis(RequestHandlerSelectors.basePackage("com.fengye.swagger2.controller"))
//过滤什么路径
.paths(PathSelectors.any())
.build();
} /**
* 创建该API的基本信息(这些基本信息会展现在文档页面中)
* 访问地址:http://项目实际地址/swagger-ui.html
* @return 返回API基本信息
*/
private ApiInfo apiInfo() {
return new ApiInfoBuilder()
//Swagger2展示界面的标题(重要)
.title("Spring Boot使用Swagger2构建的Restful API")
//描述信息(主要)
.description("Swagger2 makes develop more easily")
.version("1.0")
.termsOfServiceUrl("https://swagger.io/docs")
.license("Apache 2.0")
.licenseUrl("http://www.apache.org/licenses/LICENSE-2.0")
//作者信息
.contact(new Contact("fengye", "https://www.cnblogs.com/yif0118/",
"hyfmailsave@163.com")).build();
}
}
③创建Controller接口类测试接口:
@RestController
@RequestMapping("/oss")
@Api(value = "接口演示",description = "用来演示Swagger的一些注解")
public class TestController {
@ApiOperation(value="修改用户密码", notes="根据用户id修改密码")
@ApiImplicitParams({
@ApiImplicitParam(paramType="query", name = "userId", value = "用户ID", required = true, dataType = "Integer"),
@ApiImplicitParam(paramType="query", name = "password", value = "旧密码", required = true, dataType = "String"),
@ApiImplicitParam(paramType="query", name = "newPassword", value = "新密码", required = true, dataType = "String")
})
@RequestMapping("/updatePassword")
public String updatePassword(@RequestParam(value="userId") Integer userId, @RequestParam(value="password") String password,
@RequestParam(value="newPassword") String newPassword){
if(userId <= 0 || userId > 2){
return "未知的用户";
}
if(StringUtils.isEmpty(password) || StringUtils.isEmpty(newPassword)){
return "密码不能为空";
}
if(password.equals(newPassword)){
return "新旧密码不能相同";
}
return "密码修改成功!";
}
}
④启动项目,访问接口url地址信息:
http://项目实际地址/swagger-ui.html
2.Swagger高级配置应用
2.1.多场景启用配置
在实际开发场景中,有时我们需要在开发时使用Swagger接口文档,但是在实际上线或生产环境中并不想使用,那么就需要读取实际环境信息进行启动Swagger。
具体配置如下:
//将此类交给Spring管理,表示一个配置类
@Configuration
//开启Swagger2
@EnableSwagger2
public class Swagger2Config {
/**
* 创建API应用
* apiInfo() 增加API相关信息
* 通过select()函数返回一个ApiSelectorBuilder实例,用来控制哪些接口暴露给Swagger来展现,
* 本例采用指定扫描的包路径来定义指定要建立API的目录
*
* @return 返回Swagger的Docket配置Bean实例
*/
@Bean
public Docket createRestApi(Environment environment) {
//设置要显示的Swagger环境
Profiles profiles = Profiles.of("dev", "test");
//获取当前项目中的环境,看是否一致
boolean flag = environment.acceptsProfiles(profiles);
return new Docket(DocumentationType.SWAGGER_2)
.apiInfo(apiInfo())
.enable(flag) //enable是否启动swagger,如果为False,则swagger不能在浏览器中访问
.select()
//指定API对象扫描哪个包下面的controller
//参数any():扫描全部; none():都不扫描
//withClassAnnotation:扫描类上的注解,参数是一个注解的反射对象
//withMethodAnnotation:扫描方法上的注解
.apis(RequestHandlerSelectors.basePackage("com.fengye.swagger2.controller"))
//过滤什么路径
.paths(PathSelectors.any())
.build();
}
}
同时设置相关的环境配置信息:
application.properties:
#确认启用开发环境--swagger启用
spring.profiles.active=dev
application-dev.properties与application-pro.properties:
server.port=8081 #开发环境
server.port=8082 #生产环境
2.2.接口文档分组显示
在实际项目开发过程中,一个项目开发者有成百上千个接口文档,如果不进行分组,那么集合在一个Swagger页面中的接口就会很多,不便于查询和展示,
那么对不同的开发者来进行分组显示,不同的开发者命名自己的开发接口,就非常有必要了。
而Swagger配置中提供了groupName()进行分组显示:
@Bean
public Docket devDocket1(){
//由开发者自己管理对应的类,编写controller对应的包
return new Docket(DocumentationType.SWAGGER_2).groupName("A");
} @Bean
public Docket devDocket2(){
return new Docket(DocumentationType.SWAGGER_2).groupName("B");
} @Bean
public Docket devDocket3(){
return new Docket(DocumentationType.SWAGGER_2).groupName("C");
}
分组效果:
2.3.Swagger Api接口注释
常用到的注解有:
- Api
- ApiModel
- ApiModelProperty
- ApiOperation
- ApiParam
- ApiResponse
- ApiResponses
- ResponseHeader
①Api
Api 用在类上,说明该类的作用。可以标记一个Controller类做为swagger 文档资源,使用方式:
@Api(value = "/user", description = "Operations about user")
②ApiOeration
ApiOperation:用在方法上,说明方法的作用,每一个url资源的定义,使用方式:
@ApiOperation(
value = "Find purchase order by ID",
notes = "For valid response try integer IDs with value <= 5 or > 10. Other values will generated exceptions",
response = Order,
tags = {"Pet Store"})
③ApiParam
ApiParam请求属性,使用方式:
public ResponseEntity<User> createUser(@RequestBody @ApiParam(value = "Created user object", required = true) User user)
与Controller中的方法并列使用。
④ApiResponse
ApiResponse:响应配置,使用方式:
@ApiResponse(code = 400, message = "Invalid user supplied")
⑤ApiResponses
ApiResponses:响应集配置,使用方式:
@ApiResponses({ @ApiResponse(code = 400, message = "Invalid Order") })
⑥ResponseHeader
响应头设置,使用方法:
@ResponseHeader(name="head1",description="response head conf")
⑦其它
- @ApiImplicitParams:用在方法上包含一组参数说明;
- @ApiImplicitParam:用在@ApiImplicitParams注解中,指定一个请求参数的各个方面
- paramType:参数放在哪个地方
- name:参数代表的含义
- value:参数名称
- dataType: 参数类型,有String/int,无用
- required : 是否必要
- defaultValue:参数的默认值
- @ApiResponses:用于表示一组响应;
- @ApiResponse:用在@ApiResponses中,一般用于表达一个错误的响应信息;
- code: 响应码(int型),可自定义
- message:状态码对应的响应信息
- @ApiModel:描述一个Model的信息(这种一般用在post创建的时候,使用@RequestBody这样的场景,请求参数无法使用@ApiImplicitParam注解进行描述的时候;
- @ApiModelProperty:描述一个model的属性。
本博客写作参考文档相关:
https://www.jianshu.com/p/66a14ea07622 《简书--Swagger使用手册》
https://www.jianshu.com/p/12f4394462d5 《简书--Swagger常用注解说明》
https://swagger.io/irc/
示例代码已上传至Github地址:
https://github.com/devyf/SpringBoot_Study/tree/master/springboot_swagger2
【java框架】SpringBoot(3) -- SpringBoot集成Swagger2的更多相关文章
- SpringBoot(八)_springboot集成swagger2
swagger是一个功能强大的api框架,它的集成非常简单,不仅提供了在线文档的查阅,而且还提供了在线文档的测试. (1) 引入依赖,我们选择现在最新的版本 <dependency> &l ...
- SpringBoot集成Swagger2在线文档
目录 SpringBoot集成Swagger2在线文档 前言 集成SpringBoot 登录接口文档示例 代码 效果 注解说明 总结 SpringBoot集成Swagger2在线文档 前言 不得不说, ...
- springboot集成swagger2,构建优雅的Restful API
swagger,中文“拽”的意思.它是一个功能强大的api框架,它的集成非常简单,不仅提供了在线文档的查阅,而且还提供了在线文档的测试.另外swagger很容易构建restful风格的api,简单优雅 ...
- (转)第十一篇:springboot集成swagger2,构建优雅的Restful API
声明:本部分内容均转自于方志明博友的博客,因为本人很喜欢他的博客,所以一直在学习,转载仅是记录和分享,若也有喜欢的人的话,可以去他的博客首页看:http://blog.csdn.net/forezp/ ...
- (转) SpringBoot非官方教程 | 第十一篇:springboot集成swagger2,构建优雅的Restful API
swagger,中文“拽”的意思.它是一个功能强大的api框架,它的集成非常简单,不仅提供了在线文档的查阅,而且还提供了在线文档的测试.另外swagger很容易构建restful风格的api,简单优雅 ...
- SpringBoot非官方教程 | 第十一篇:springboot集成swagger2,构建优雅的Restful API
转载请标明出处: 原文首发于:https://www.fangzhipeng.com/springboot/2017/07/11/springboot-swagger2/ 本文出自方志朋的博客 swa ...
- 【微框架】Maven +SpringBoot 集成 阿里大鱼 短信接口详解与Demo
Maven+springboot+阿里大于短信验证服务 纠结点:Maven库没有sdk,需要解决 Maven打包找不到相关类,需要解决 ps:最近好久没有写点东西了,项目太紧,今天来一篇 一.本文简介 ...
- SpringBoot集成Swagger2实现Restful(类型转换错误解决办法)
1.pom.xml增加依赖包 <dependency> <groupId>io.springfox</groupId> <artifactId>spri ...
- SpringBoot 集成Swagger2自动生成文档和导出成静态文件
目录 1. 简介 2. 集成Swagger2 2.1 导入Swagger库 2.2 配置Swagger基本信息 2.3 使用Swagger注解 2.4 文档效果图 3. 常用注解介绍 4. Swagg ...
随机推荐
- Windows font-size: 10px; bug
Windows font-size: 10px; bug Windows 最小只能渲染 font-size: 12px; ???屏幕分辨率 macOS 正常渲染 10px PC 最小只能渲染 font ...
- prefetch & preload & prerender & dns-prefetch & preconnect
prefetch & preload & prerender & dns-prefetch & preconnect performance optimization ...
- Bearer Token & OAuth 2.0
Bearer Token & OAuth 2.0 access token & refresh token http://localhost:8080/#/login HTTP Aut ...
- rename github
rename GitHub github repo rename xgqfrms 2012-2020 www.cnblogs.com 发布文章使用:只允许注册用户才可以访问!
- free open music API all in one
free open music API all in one music API SoundCloud xgqfrms · free https://w.soundcloud.com/player/? ...
- Dart & data type(static / dynamic)
Dart & data type(static / dynamic) Darts 飞镖 标枪 javelin/darts type https://dartpad.dartlang.org/ ...
- Google Advanced Search Skills
Google Advanced Search Skills site:
- 详解支付体系颠覆者NGK公链:如何通过呼叫河马智能合约加速转账?
纵观全球加密货币市场,至今为止,全球已经发行的加密货币以及数字代币的数量已经超过了7000种,且未来还将会有更多的加密货币或数字代币出现.在众多加密货币项目中,投资者很难在众多的项目里甄别项目的好坏以 ...
- DHCP (Dynamic Host Configuration Protocol )协议的探讨与分析
DHCP (Dynamic Host Configuration Protocol )协议的探讨与分析 问题背景 最近在工作中遇到了连接外网的交换机在IPv6地址条件下从运营商自动获取的DNS地址与本 ...
- pytorch中修改后的模型如何加载预训练模型
问题描述 简单来说,比如你要加载一个vgg16模型,但是你自己需要的网络结构并不是原本的vgg16网络,可能你删掉某些层,可能你改掉某些层,这时你去加载预训练模型,就会报错,错误原因就是你的模型和原本 ...