1 为什么是使用swagger?

  1-1 当后台开发人员开发好接口,是不是还要重新书写一份接口文档提给前端人员,当然对于程序员最不喜欢的就是书写文档(当然文档是必须的,有利于项目的维护)

  1-2 当后台人员开发接口,当然后台开发者也是需要测试好接口是否可用,当参数少的时候测试还不是很麻烦,当参数有十多个的时候,就需要后台开发者一个一个的拼接参数,很是耗时间而且还容易写错参数名,swagger就很好解决了这个问题(当然也是可以借助其他插件:rest-client工具,PostMan)

2 搭建环境:window,spring boot,swaager,maven

3 开始搭建:搭建过程很简单,有关于swagger注解本文不详细叙述,其实只使用常用的几个注解就ok了(@ApiOperation,@EnableSwagger2,@Api)

  3-1 导入必须jar包 ,修改pom.xml  

<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<version>RELEASE</version>
</dependency> <dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-aop</artifactId>
</dependency> <!-- swagger -->
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger-ui</artifactId>
<version> 2.6.0</version>
</dependency>
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger2</artifactId>
<version> 2.6.0</version>
</dependency>
<!-- swagger end -->

    3-2 配置swagger 

@Configuration
@EnableSwagger2 //swagger注解
public class SwaggerConfig { @Bean
public Docket allInterface() {
return new Docket(DocumentationType.SWAGGER_2).groupName("AllInterface(所有接口)")// 定义组
.select() // 选择那些路径和api会生成document
.apis(RequestHandlerSelectors.basePackage("com.lishun.controller")) // 拦截的包路径
.paths(regex("/.*"))// 拦截的接口路径
.build() // 创建
.apiInfo(apiInfo())// 配置说明
.tags(new Tag("index", "起始页"), getTags());
}
/**
* @Description:这里可以指定其他tag(对应controller的@Api注解的tags属性值)
* @author lishun
* @date 2018/2/28
* @param []
* @return springfox.documentation.service.Tag[]
*/
private Tag[] getTags() {
Tag[] tags = { new Tag("login", "登录相关") };
return tags;
} private ApiInfo apiInfo() {
return new ApiInfoBuilder()//
.title("swagger api 文档")// 标题
.description("swagger api 文档")// 描述
.termsOfServiceUrl("")//
.contact(new Contact("", "", ""))// 联系
.version("1.0")// 版本
.build();
}
}

    3-3 统一所有接口返回值(便于前端人员开发,和统一处理controller异常)

public class ResultBean<T> implements Serializable {
/*提示信息*/
public String message = "";
/*状态码*/
public Integer code;
/*总页数*/
private long totalPage;
/*页容量*/
private int pages;
/*页码*/
private int pageNum;
/*返回实体信息*/
private T resultData;
/*返回集合实体信息*/
private List<T> resultDataList; public ResultBean() {
} public ResultBean(List<T> resultData, long totalPage, int pages, int pageNum) {
this.resultDataList = resultData;
this.totalPage = totalPage;
this.pages = pages;
this.pageNum = pageNum;
} public ResultBean(T resultData) {
this.resultData = resultData;
} public void setMessage(String message) {
this.message = message;
} public long getTotalPage() {
return totalPage;
} public void setTotalPage(long totalPage) {
this.totalPage = totalPage;
} public int getPages() {
return pages;
} public void setPages(int pages) {
this.pages = pages;
} public int getPageNum() {
return pageNum;
} public void setPageNum(int pageNum) {
this.pageNum = pageNum;
} public List<T> getResultDataList() {
return resultDataList;
} public void setResultDataList(List<T> resultDataList) {
this.resultDataList = resultDataList;
} public void setMessage(String message, Object... args) {
this.message = String.format(message, args);
} public String getMessage() {
return message;
} public void setResultData(T resultData) {
this.resultData = resultData;
} public T getResultData() {
return this.resultData;
} public Integer getCode() {
return code;
} public void setCode(Integer code) {
this.code = code;
} public <T> void setResultBean(Integer code, String message,
Object... mesaageFormatArgs) {
setCode(code);
setMessage(message, mesaageFormatArgs);
}
}

    3-4 统一处理controller异常    

/**
* @author lishun
* @Description: 控制器aop拦截
* @date 2017/10/27
*/
@Component
@Aspect
public class ControllerAspect {
@Pointcut("execution(public com.lishun.result.ResultBean com.lishun.controller.*.*(..))")
public void dataSource(){}; @Around("dataSource()")
public Object doAround(ProceedingJoinPoint proceedingJoinPoint) throws Throwable {
ResultBean result = null;
try {
result = (ResultBean<?>)proceedingJoinPoint.proceed();
} catch (Exception e) {
result = new ResultBean();
result.setCode(ResultCode.FAILED);
result.setMessage(e.getMessage());
e.printStackTrace();
}
return result;
}
}

    3-4 contrlloer

@RestController
@Api(tags = { "index" })
public class IndexController { @GetMapping("/index/{id}")
@ApiOperation(value = "findByOne", notes = "获取一条数据")
public ResultBean<String> findByOne(@PathVariable(value = "id") String id) {
ResultBean<String> resultBean = new ResultBean<>();
resultBean.setCode(ResultCode.OK);
resultBean.setResultData("请求成功");
return resultBean;
}
@PostMapping("/index/add")
@ApiOperation(value = "add", notes = "新增")
public ResultBean<String> add(Users users) {
ResultBean<String> resultBean = new ResultBean<>();
resultBean.setCode(ResultCode.OK);
resultBean.setResultData("请求成功");
return resultBean;
}
@DeleteMapping("/index/delete/{id}")
@ApiOperation(value = "delete", notes = "删除")
public ResultBean<String> delete(@PathVariable(value = "id") String id) {
ResultBean<String> resultBean = new ResultBean<>();
resultBean.setCode(ResultCode.OK);
resultBean.setResultData("请求成功");
return resultBean;
}
}

    3-5 测试

      主要是测试接口api,所以这里就没有数据库访问的业务逻辑层

      启动项目,访问http://localhost:8080/swagger-ui.html#/

      

      

      展开add接口

      

    3-6 注意!!!!! 生成环境需要把swagger禁用,swagger只是适合在开发和测试环境中使用,源代码

      

    

分享一个集成在项目中的REST APIs文档框架swagger的更多相关文章

  1. 使用Swagger2构建SpringMVC项目中的Restful API文档

    使用Swagger自动生成API文档,不仅增加了项目的可维护性,还提高了API的透明度更利于快速测试等工作,便于更快地发现和解决问题. 本篇文章只记录整合过程,关于Security Configura ...

  2. 分享我在 vue 项目中关于 api 请求的一些实现及项目框架

    本文主要简单分享以下四点 如何使用 axios 如何隔离配置 如何模拟数据 分享自己的项目框架 本文主要目的为以下三点 希望能够帮到一些人 希望能够得到一些建议 奉上一个使用Vue的模板框架 我只是把 ...

  3. .NET平台开源项目速览(4).NET文档生成工具ADB及使用

    很久以前就使用ADB这个工具来生成项目的帮助文档.功能强大,在学习一些开源项目的过程中,官方没有提供CHM帮助文档,所以为了快速的了解项目结构和注释.就生成文档来自己看,非常好用.这也是一个学习方法吧 ...

  4. API文档工具-Swagger的集成

    最近安装了API文档工具swagger,因为Github上已有详细安装教程,且安装过程中没有碰到大的阻碍,所以此文仅对这次安装做一份大致记录 相关网站 Swagger 官方地址: http://swa ...

  5. 如何在ASP.NET Core 中快速构建PDF文档

    比如我们需要ASP.NET Core 中需要通过PDF来进行某些简单的报表开发,随着这并不难,但还是会手忙脚乱的去搜索一些资料,那么恭喜您,这篇帖子会帮助到您,我们就不会再去浪费一些宝贵的时间. 在本 ...

  6. Springboot中整合knife4j接口文档

    在项目开发过程中,web项目的前后端分离开发,APP开发,需要由前端后端工程师共同定义接口,编写接口文档,之后大家都根据这个接口文档进行开发. 什么是knife4j 简单说knife4j就swagge ...

  7. 在我的电脑中删除wps云文档图标

    在我的电脑中删除wps云文档图标 右键点击win10左下角选择运行,输入regedit打开注册表后,找到以下注册表路径: HKEY_CURRENT_USER\Software\Microsoft\Wi ...

  8. 分享一个集成.NET Core+Swagger+Consul+Polly+Ocelot+IdentityServer4+Exceptionless+Apollo+SkyWalking的微服务开发框架

    集成.NET Core+Swagger+Consul+Polly+Ocelot+IdentityServer4+Exceptionless+Apollo的微服务开发框架 Github源代码地址 htt ...

  9. 分享一个CQRS/ES架构中基于写文件的EventStore的设计思路

    最近打算用C#实现一个基于文件的EventStore. 什么是EventStore 关于什么是EventStore,如果还不清楚的朋友可以去了解下CQRS/Event Sourcing这种架构,我博客 ...

随机推荐

  1. vue学习笔记(四)——Vue实例以及生命周期

    1.Vue实例API 1.构造器(实例化) var vm = new Vue({ //选项 |-------DOM(3) |   |-------el (提供一个在页面上已存在的 DOM 元素作为 V ...

  2. 批处理注册dll时候 遇到错误:模块已加载,但对***dll的调用失败

    解决方法 在批处理的第一行加入:cd /d %~dp0 然后在批处理上右键选择使用管理员权限运行

  3. PID算法

    所谓PID就是比例-积分-微分的英文缩写,但并不是必须同时具备这三种算法,也可以是 PD, PI,甚至只有 P算法控制,下面分别介绍每个参数的含义:首先需要明确一个事实就是,要实现PID算法,必须在硬 ...

  4. .net Core学习笔记3 编辑列表并绑定下拉列

    本次主要实现列表的编辑及下拉列表的绑定 先看效果图: 主要用DropDownList绑定下拉列后端代码: 1:定义一个存下拉数据类 public class SelectItem { public s ...

  5. 开发步骤Dubbo、spring mvc、springboot、SSM整合开发步骤

    一.Dubbo开发步骤: 链接:https://pan.baidu.com/s/1pMPO1kf 密码:9zaa 第一: 1.创建consumer工程2.在pom.xml文件下添加配置3.添加appl ...

  6. 壮美大山包-2017中国大山包国际超百公里ITRA积分赛赛记

    2017年4月份用时28个多小时跑完江南100,付出的代价是双脚多达8个以上的水泡.所以接下来的4月29日的环汶川越野赛果断的从60公里换到了30公里组,慢悠悠的完成了. 虽然在赛道上一度想再也不参加 ...

  7. WebRoot 与 webContent的区别

    Web项目发布到Tomcat中. 在Eclipse中生成项目是WebContent目录 而在MyEclipse中生成的项目目录名字好像叫做WebRoot,那么如果把MyEclipse的项目导入到Ecl ...

  8. android 页面的切换

    startActivity后加:IntentHelper.jump(mContext, MyBalanceActivity.class);activity.overridePendingTransit ...

  9. 02-创建 TLS CA证书及密钥

    创建 TLS CA证书及密钥 kubernetes 系统的各组件需要使用 TLS 证书对通信进行加密,本文档使用 CloudFlare 的 PKI 工具集 cfssl 来生成 Certificate ...

  10. appium GUI介绍

    Appium作为APP端的自动化测试工具,具有很多的有点,今天主要介绍一下它的UI界面,包含其中的一些参数等.主要说的是windows下的APPIUM GUI. 先看一眼它的界面(版本为1.4.16. ...