Springboot联结万物学习笔记--Springboot微服务基础搭建篇(番外)-- SpringBoot中集成swagger
博客说明:撰写博客目的是在记录自己所学知识、在工作中使用技术遇到的技术问题、一些技术感悟,因此避免不了涉及到和其他文章有相似之处。本文从作者自己的实践中指出相关踩坑问题,着重指出学习过程中遇到的相关问题。如果存在相关侵权问题请联系博主删除,同时有技术上的见解可以在评论去里发出,会不定期回复,谢谢。
gitee地址:https://gitee.com/woniurunfast/springbootwitheverything
01背景
在企业SpringBoot的日常开发中,经常需要调试自己的接口或者与其他人联调,因此必要的接口文档是必须的,但随着版本迭代,接口文档往往很容易就跟不上代码了,因此swagger就能帮我我们在开发过程中生成最新的文档并帮助调试
02目标
1、集成swagger测试
03pom文件引入依赖
<!-- 文档 -->
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger2</artifactId>
<version>2.9.2</version>
</dependency>
<dependency>
<groupId>io.swagger</groupId>
<artifactId>swagger-models</artifactId>
<version>1.5.21</version>
</dependency>
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger-ui</artifactId>
<version>2.9.2</version>
</dependency>
<dependency>
<groupId>com.github.xiaoymin</groupId>
<artifactId>swagger-bootstrap-ui</artifactId>
<version>1.8.5</version>
</dependency>
04配置类创建:
在config包下面建立swagger配置文件:
/**
* itbooking系统平台<br/>
* com.itbooking.config<br/>
* SweggerConfiguration.java<br/>
* 创建人:mofeng <br/>
* 时间:2018年9月24日-下午5:35:07 <br/>
* 2018itbooking-版权所有<br/>
*/
package com.hkx.demo.config;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import springfox.documentation.builders.ApiInfoBuilder;
import springfox.documentation.builders.PathSelectors;
import springfox.documentation.builders.RequestHandlerSelectors;
import springfox.documentation.service.ApiInfo;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spring.web.plugins.Docket;
import springfox.documentation.swagger2.annotations.EnableSwagger2;
@Configuration
@EnableSwagger2
public class SwaggerConfiguration {
/**
* 在完成上述配置之后,其实就已经可以产生帮助文档了,但是这样的文档主要针对请求本身,而描述主要来源于函数等命名产生。
* 对用户体验不好,我们通常需要自己增加一些说明来丰富文档内容。如果:
* 加入
*
* @ApiIgnore 忽略暴露的 api
* @ApiOperation(value = "查找", notes = "根据用户 ID 查找用户")
* 添加说明
* <p>
* <p>
* 其他注解:
* @Api :用在类上,说明该类的作用
* @ApiImplicitParams :用在方法上包含一组参数说明
* @ApiResponses :用于表示一组响应
* 完成上述之后,启动springboot程序,
* 旧访问:http://localhost:8080/swagger-ui.html
* 新访问:http://localhost:8080/doc.html
* @ApiOperation() 用于方法;表示一个http请求的操作
* value用于方法描述
* notes用于提示内容
* tags可以重新分组(视情况而用)
* @ApiParam() 用于方法,参数,字段说明;表示对参数的添加元数据(说明或是否必填等)
* name–参数名
* value–参数说明
* required–是否必填
* @ApiModel()用于类 ;表示对类进行说明,用于参数用实体类接收
* value–表示对象名
* description–描述
* 都可省略
* @ApiModelProperty()用于方法,字段; 表示对model属性的说明或者数据操作更改
* value–字段说明
* name–重写属性名字
* dataType–重写属性类型
* required–是否必填
* example–举例说明
* hidden–隐藏
* @ApiIgnore()用于类或者方法上,可以不被swagger显示在页面上 比较简单, 这里不做举例
* @ApiImplicitParam() 用于方法
* 表示单独的请求参数
* @ApiImplicitParams() 用于方法,包含多个 @ApiImplicitParam
* name–参数ming
* value–参数说明
* dataType–数据类型
* paramType–参数类型
* example–举例说明
*/
@Bean
public Docket createRestApi() {
return new Docket(DocumentationType.SWAGGER_2)
.apiInfo(getApiInfo())
.select()
// 核心:读取把那个包下面的方法作为接口,只能是:controller
.apis(RequestHandlerSelectors.basePackage("com.hkx.demo.controller"))
.paths(PathSelectors.any())
.build();
}
private ApiInfo getApiInfo() {
return new ApiInfoBuilder()
.title("项目数据接口")
.description("项目数据接口,在线体验文档")
.termsOfServiceUrl("https://api.hkx.com/api")
.version("1.0")
.build();
}
}
Swagger2 部分注解说明:
1、@Api():用在请求的类上,表示对类的说明
参数:
tags:说明该类的作用,参数是个数组,可以填多个。
value="该参数没什么意义,在UI界面上不显示,所以不用配置"
description = "用户基本信息操作"
2、@ApiOperation():用于方法,表示一个http请求访问该方法的操作
参数:
value="方法的用途和作用"
notes="方法的注意事项和备注"
tags:说明该方法的作用,参数是个数组,可以填多个。
格式:tags={"作用1","作用2"}
(在这里建议不使用这个参数,会使界面看上去有点乱,前两个常用)
3、@ApiModel():用于响应实体类上,用于说明实体作用
参数:
description="描述实体的作用"
4、@ApiModelProperty:用在属性上,描述实体类的属性
参数:
value="用户名" 描述参数的意义
name="name" 参数的变量名
required=true 参数是否必选
5、@ApiImplicitParams:用在请求的方法上,包含多@ApiImplicitParam
6、@ApiImplicitParam:用于方法,表示单独的请求参数
参数:
name="参数ming"
value="参数说明"
dataType="数据类型"
paramType="query" 表示参数放在哪里
· header 请求参数的获取:@RequestHeader
· query 请求参数的获取:@RequestParam
· path(用于restful接口) 请求参数的获取:@PathVariable
· body(不常用)
· form(不常用)
defaultValue="参数的默认值"
required="true" 表示参数是否必须传
7、@ApiParam():用于方法,参数,字段说明 表示对参数的要求和说明
参数:
name="参数名称"
value="参数的简要说明"
defaultValue="参数默认值"
required="true" 表示属性是否必填,默认为false
8、@ApiResponses:用于请求的方法上,根据响应码表示不同响应
一个@ApiResponses包含多个@ApiResponse
9、@ApiResponse:用在请求的方法上,表示不同的响应
参数:
code="404" 表示响应码(int型),可自定义
message="状态码对应的响应信息"
10、@ApiIgnore():用于类或者方法上,不被显示在页面上
11、@Profile({"dev", "test"}):用于配置类上,表示只对开发和测试环境有用