spring-boot做为当前最为流行的Java web开发脚手架,愈来愈多的开发者选择用其来构建企业级的RESTFul API接口。这些接口不但会服务于传统的web端(b/s),也会服务于移动端。在实际开发过程当中,这些接口还要提供给开发测试进行相关的白盒测试,那么势必存在如何在多人协做中共享和及时更新API开发接口文档的问题。 html
假如你已经对传统的wiki文档共享方式所带来的弊端深恶痛绝,那么尝试一下Swagger2 方式,必定会让你有不同的开发体验。java
使用 Swagger 集成文档具备如下几个优点:git
接下来,咱们就经过Spring Boot 来整合Swagger实如今线API文档的功能。web
为方便咱们初始化项目,Spring Boot给咱们提供一个项目模板生成网站。spring
1. 打开浏览器,访问:https://start.spring.io/后端
2. 根据页面提示,选择构建工具,开发语言,项目信息等。api
3. 点击 Generate the project,生成项目模板,生成以后会将压缩包下载到本地。浏览器
4. 使用IDE导入项目,我这里使用Eclipse,经过导入Maven项目的方式导入。springboot
添加 Maven 相关依赖,这里须要添加上WEB和SWAGGER依赖。restful
WEB依赖
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency>
swagger依赖,这里选择 2.9.2 版本。
<!-- swagger --> <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>
添加一个swagger 配置类,在工程下新建 config 包并添加一个 SwaggerConfig 配置类。
SwaggerConfig.java
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 SwaggerConfig { @Bean public Docket createRestApi(){ return new Docket(DocumentationType.SWAGGER_2).apiInfo(apiInfo()) .select() .apis(RequestHandlerSelectors.any()) .paths(PathSelectors.any()).build(); } private ApiInfo apiInfo(){ return new ApiInfoBuilder() .title("Kitty API Doc") .description("This is a restful api document of Kitty.") .version("1.0") .build(); } }
添加一个控制器,在工程下新建 controller包并添加一个 HelloController控制器。
HelloController.java
package com.louis.springboot.demo.controller; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiParam; /* 类注解 */ @Api(value = "desc of class") @RestController public class HelloController { /* 方法注解 */ @ApiOperation(value = "desc of method", notes = "") @GetMapping(value="/hello") public Object hello( /* 参数注解 */ @ApiParam(value = "desc of param" , required=true ) @RequestParam String name) { return "Hello " + name + "!"; } }
1. 右键项目 -> Run as -> Maven install,开始执行Maven构建,第一次会下载Maven依赖,可能须要点时间,若是出现以下信息,就说明项目编译打包成功了。
2. 右键文件 DemoApplication.java -> Run as -> Java Application,开始启动应用,当出现以下信息的时候,就说明应用启动成功了,默认启动端口是8080。
3. 打开浏览器,访问:http://localhost:8080/swagger-ui.html,进入swagger接口文档界面。
4. 展开hello-controller的hello接口,输入参数并点击执行,就能够看到接口测试结果了。
swagger 经过注解接口生成文档,包括接口名,请求方法,参数,返回信息等。
@Api: 修饰整个类,用于controller类上
@ApiOperation: 描述一个接口,用户controller方法上
@ApiParam: 单个参数描述
@ApiModel: 用来对象接收参数,即返回对象
@ApiModelProperty: 对象接收参数时,描述对象的字段
@ApiResponse: Http响应其中的描述,在ApiResonse中
@ApiResponses: Http响应全部的描述,用在
@ApiIgnore: 忽略这个API
@ApiError: 发生错误的返回信息
@ApiImplicitParam: 一个请求参数
@ApiImplicitParam: 多个请求参数
更多使用说明,参考 Swagger 使用手册。
在不少时候,咱们须要在调用咱们每个接口的时候都携带上一些通用参数,好比采起token验证逻辑的每每在接口请求时须要把token也一块儿传入后台,接下来,咱们就来说解一下如何给Swagger添加固定的请求参数。
修改SwaggerConfig配置类,替换成以下内容,利用ParameterBuilder构成请求参数。
SwaggerConfig.java
@Configuration @EnableSwagger2 public class SwaggerConfig { @Bean public Docket createRestApi(){ // 添加请求参数,咱们这里把token做为请求头部参数传入后端 ParameterBuilder parameterBuilder = new ParameterBuilder(); List<Parameter> parameters = new ArrayList<Parameter>(); parameterBuilder.name("token").description("令牌") .modelRef(new ModelRef("string")).parameterType("header").required(false).build(); parameters.add(parameterBuilder.build()); return new Docket(DocumentationType.SWAGGER_2).apiInfo(apiInfo()).select() .apis(RequestHandlerSelectors.any()).paths(PathSelectors.any()) .build().globalOperationParameters(parameters); // return new Docket(DocumentationType.SWAGGER_2).apiInfo(apiInfo()) // .select() // .apis(RequestHandlerSelectors.any()) // .paths(PathSelectors.any()).build(); } private ApiInfo apiInfo(){ return new ApiInfoBuilder() .title("Swagger API Doc") .description("This is a restful api document of Swagger.") .version("1.0") .build(); } }
完成以后从新启动应用,再次查看hello接口,能够看到已经支持发送token请求参数了。
先后端分离架构好,不用代码网页一块儿搞。
你写你页面,我写我接口,中间交由Swagger来接手。
文档风格简洁而优雅,接口测试简单又方便。
官方网站:https://swagger.io/
使用手册:https://gumutianqi1.gitbooks.io/specification-doc/content/tools-doc/spring-boot-swagger2-guide.html
Maven仓库:https://mvnrepository.com/artifact/io.springfox/springfox-swagger-ui
码云:https://gitee.com/liuge1988/spring-boot-demo.git
做者:朝雨忆轻尘
出处:https://www.cnblogs.com/xifengxiaoma/
版权全部,欢迎转载,转载请注明原文做者及出处。