2019独角兽企业重金招聘Python工程师标准>>>

SpringBoot入门——使用Swagger2构建Restful API文档

自己写程序测试时写的,不喜勿喷,可能有错,欢迎纠正

一、背景

由于Spring Boot能够快速开发、便捷部署等特性,相信有很大一部分Spring Boot的用户会用来构建RESTful API。而我们构建RESTful API的目的通常都是由于多终端的原因,这些终端会共用很多底层业务逻辑,因此我们会抽象出这样一层来同时服务于多个移动端或者Web前端。

这样一来,我们的RESTful API就有可能要面对多个开发人员或多个开发团队:IOS开发、Android开发或是Web开发等。为了减少与其他团队平时开发期间的频繁沟通成本,传统做法我们会创建一份RESTful API文档来记录所有接口细节,然而这样的做法有以下几个问题:

  • 由于接口众多,并且细节复杂(需要考虑不同的HTTP请求类型、HTTP头部信息、HTTP请求内容等),高质量地创建这份文档本身就是件非常吃力的事,下游的抱怨声不绝于耳。
  • 随着时间推移,不断修改接口实现的时候都必须同步修改接口文档,而文档与代码又处于两个不同的媒介,除非有严格的管理机制,不然很容易导致不一致现象。

为了解决上面这样的问题,本文将介绍RESTful API的重磅好伙伴Swagger2,它可以轻松的整合到Spring Boot中,并与Spring MVC程序配合组织出强大RESTful API文档。它既可以减少我们创建文档的工作量,同时说明内容又整合入实现代码中,让维护文档和修改代码整合为一体,可以让我们在修改代码逻辑的同时方便的修改文档说明。另外Swagger2也提供了强大的页面测试功能来调试每个RESTful API。

二、Swagger简介

Swagger 是一款RESTFUL接口的文档在线自动生成+功能测试功能软件。本文简单介绍了在项目中集成swagger的方法和一些常见问题。

Swagger 是一个规范和完整的框架,用于生成、描述、调用和可视化 RESTful 风格的 Web 服务。总体目标是使客户端和文件系统作为服务器以同样的速度来更新。文件的方法,参数和模型紧密集成到服务器端的代码,允许API来始终保持同步。Swagger 让部署管理和使用功能强大的API从未如此简单。

三、SpringBoot中应用Swagger2

(1)、新建Maven项目

项目名称:springboot

(2)、在pom中引入Springboot项目需要的包

新建Maven项目,往其中pom.xml中引入Springboot需要的包

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>com.springboot</groupId><artifactId>spring-boot2</artifactId><version>0.0.1-SNAPSHOT</version><packaging>jar</packaging><name>springboot</name><url>http://maven.apache.org</url><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>1.5.4.RELEASE</version></parent><properties><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><java.version>1.8</java.version></properties><dependencies><!-- web --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><!-- Springboot devtools热部署 依赖包 --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-devtools</artifactId><optional>true</optional><scope>true</scope></dependency></dependencies><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin </artifactId><configuration><!-- 如果没有该项配置,devtools不会起作用,即应用不会restart --><fork>true</fork></configuration></plugin></plugins></build></project>

(3)、在pom中引入Swagger需要的包

         <dependency><groupId>io.springfox</groupId><artifactId>springfox-swagger2</artifactId><version>2.7.0</version></dependency><dependency><groupId>io.springfox</groupId><artifactId>springfox-swagger-ui</artifactId><version>2.7.0</version></dependency>

(4)、创建Swagger2配置类

包名:com.springboot.config

类名:SwaggerConfig

package com.springboot.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
// 启用swagger
@EnableSwagger2
public class SwaggerConfig {@Beanpublic Docket createRestApi() {return new Docket(DocumentationType.SWAGGER_2).apiInfo(this.apiInfo()).groupName("XX组").useDefaultResponseMessages(false).enableUrlTemplating(false).select().apis(RequestHandlerSelectors.basePackage("com.springboot.controller")).paths(PathSelectors.any()).build();}private ApiInfo apiInfo() {return new ApiInfoBuilder().title("Spring Boot Swagger2 By Test").description("XX项目API").termsOfServiceUrl("127.0.0.1:8080/test/").version("0.0.1").build();}
}

参数说明:

----------------------------------------------------------------------------------

  • @Configuration:声明此类为配置类,让Spring加载
  • @EnableSwagger2:启用Swagger2

----------------------------------------------------------------------------------

  • apiInfo():创建该Api的基本信息
  • groupName():设置组名
  • useDefaultResponseMessages():使用默认的响应信息,一般设置false
  • enableUrlTemplating(false):使模板的URL

----------------------------------------------------------------------------------

  • apis():扫描哪些包
  • PathSelectors.any():任何满足条件的路径

----------------------------------------------------------------------------------

(5)、创建Controller类

包名:com.springboot.controller;

类名:HelloController

package com.springboot.controller;import static org.springframework.util.MimeTypeUtils.APPLICATION_JSON_VALUE;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;
import com.springboot.entity.User;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiOperation;@RestController
@RequestMapping("/test")
@Api(tags="与检查单有关的接口")
public class HelloController {@ApiOperation(value = "获得hello字符串JSON", response = String.class, produces = APPLICATION_JSON_VALUE,notes = "根据User对象创建用户")@RequestMapping(value = { "/hello" }, method = RequestMethod.GET)public String hello() {return "hello";}@ApiOperation(value = "修改用户", response = String.class, produces = APPLICATION_JSON_VALUE,notes = "根据id修改用户")@ApiImplicitParam(name = "user", value = "用户详细实体user", required = true, dataType = "User")@RequestMapping(value = { "/modifyUser" }, method = RequestMethod.POST) public User modifyUser(@RequestBody User user) {user.setName("张三");user.setAge(20);return user;}}

参数说明:

----------------------------------------------------------------------------------

  • @Api:对Controller项的标题描述信息设置
  • @ApiOperation:对接口信息进行描述
  1. name:参数名
  2. value:参数描述信息
  3. required:是否可以发送请求信息进行测试
  4. dataType:数据类型
  • @ApiImplicitParam:对接口的方法的参数进行描述
  1. value:操作项名字设置
  2. response:返回类型设置
  3. response:返回数据格式
  4. notes:此项的描述信息

----------------------------------------------------------------------------------

三、管理接口的地址

http://localhost:8080/swagger-ui.html

转载于:https://my.oschina.net/u/3523885/blog/1491750

SpringBoot入门——使用Swagger构建Restful API文档相关推荐

  1. springboot集成swagger2构建RESTful API文档

    在开发过程中,有时候我们需要不停的测试接口,自测,或者交由测试测试接口,我们需要构建一个文档,都是单独写,太麻烦了,现在使用springboot集成swagger2来构建RESTful API文档,可 ...

  2. Spring Boot 集成 Swagger 生成 RESTful API 文档

    原文链接: Spring Boot 集成 Swagger 生成 RESTful API 文档 简介 Swagger 官网是这么描述它的:The Best APIs are Built with Swa ...

  3. springmvc+swagger构建Restful风格文档

    本次和大家分享的是java方面的springmvc来构建的webapi接口+swagger文档:上篇文章分享.net的webapi用swagger来构建文档,因为有朋友问了为啥.net有docpage ...

  4. Spring Boot 中使用 Swagger2 构建强大的 RESTful API 文档

    项目现状:由于前后端分离,没有很好的前后端合作工具. 由于接口众多,并且细节复杂(需要考虑不同的HTTP请求类型.HTTP头部信息.HTTP请求内容等),高质量地创建这份文档本身就是件非常吃力的事,下 ...

  5. Spring Boot中使用Swagger2构建强大的RESTful API文档

    由于Spring Boot能够快速开发.便捷部署等特性,相信有很大一部分Spring Boot的用户会用来构建RESTful API.而我们构建RESTful API的目的通常都是由于多终端的原因,这 ...

  6. Spring Boot 集成Swagger2生成RESTful API文档

    Swagger2可以在写代码的同时生成对应的RESTful API文档,方便开发人员参考,另外Swagger2也提供了强大的页面测试功能来调试每个RESTful API. 使用Spring Boot可 ...

  7. 超详细!使用swagger自动生成Api文档(swagger-ui)

    介绍 swagger是什么? swagger-ui 使用swagger-ui 简单使用 swagger api注解 本文参考: 介绍 这里是一些介绍,如果想直接看如何使用,请直接跳过这部分.但如果有时 ...

  8. 使用Swashbuckle构建RESTful风格文档

    本次和大家分享的是Swagger to WebApi的nuget包Swashbuckle:因为项目需要统一api文档的风格,并要支持多种开发语言(C#,java,python),所以首先想到的是swa ...

  9. Swagger UI教程 API 文档神器 搭配Node使用

    一.node.js的安装 运行环境必须使用node.js,把其作为服务器来跑, 安装教程 二.swagger的安装 教程 对上面的图片进行进行讲解,教程博客中大部分都讲清楚了,所以我这里就不说了,在我 ...

  10. swagger php修改成中文,PHP使用swagger自动生成API文档

    使用 swagger 自动生成 API 文档 使用 swagger 自动生成 API 文档,有需要的朋友可以参考下. 一.下载 swagger-ui 直接上传服务器 二.下载 swagger-php ...

最新文章

  1. 图片的宽铺满全屏 微信小程序_2020冬至快乐图片!,图片祝福贺卡,朋友圈冬至早安问候语动态图片微信小程序...
  2. MYSQL专题-绝对实用的MYSQL优化总结
  3. Oracle如何精确计算row的大小
  4. 服务器状态down,HAProxy的状态显示DOWN
  5. python 概率分布类型检验_统计学:假设检验Python案例实现+概率论基础知识回顾...
  6. 《Spring源码深度解析》 PDF
  7. 字符串固定长度 易语言_易语言宽字符数据类型怎么设置
  8. js 操作table: insertRow(),deleteRow(),insertCell(),deleteCell()方法
  9. java实时监控数据变化_服务数据实时监控平台
  10. linux中crontab的用法
  11. Silicio for Mac(迷你播放器)免费版
  12. MongoDB 学习笔记(一)—— 安装入门
  13. python wmic_wmic linux python
  14. canvas实现虚线带箭头效果
  15. React移动端适配方案
  16. 朱晔的互联网架构实践心得S1E10:数据的权衡和折腾【系列完】
  17. android车载行业前景,车载 Android 系统快来了,但前景可能并不乐观
  18. Autovue 集成
  19. 服务器nvme硬盘识别不了,NVMe硬盘无法安装win7怎么办|安装win7找不到nvme硬盘解决方法...
  20. 《白夜追凶》的黑客水平怎么样?终于有部国产剧没有把黑客当神了

热门文章

  1. 末日帝国——Agile公司的困境
  2. Python在定义类方法时self的作用是什么?是否可以不写
  3. pyQT实现自动找茬游戏
  4. htcvr设备计算机配置,HTC Vive电脑配置要求多高?享受VR虚拟现实还要一台好电脑!...
  5. 镜像电流源特点_MOS管电压型静电击穿特点
  6. Android应用层 知识体系
  7. Futter基础第20篇: 实现轮播图 flutter_swiper
  8. 7-2 两个数的简单计算器 (10 分)
  9. SQL Sever — 建表语句,设置种子数量与增量以及设置主键 代码
  10. 蓝桥训练系统 矩阵乘法