Swagger 是一个规范和完整的框架,用于生成、描述、调用和可视化 RESTful 风格的 Web 服务。本文主要介绍了在 Spring Boot 添加 Swagger 支持, 生成可自动维护的 API 文档。

POM 文件

在pom.xml中加入Swagger2的依赖

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

代码支持

其次我们需要在代码中添加支持,于 Application 同级目录添加 Swagger 配置类,类名随意,但需要增加@EnableSwagger2和@Configuration注解,如下:

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import springfox.documentation.builders.ApiInfoBuilder;
import springfox.documentation.builders.RequestHandlerSelectors;
import springfox.documentation.service.ApiInfo;
import springfox.documentation.service.Contact;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spring.web.plugins.Docket;
import springfox.documentation.swagger2.annotations.EnableSwagger2; @Configuration
@EnableSwagger2
public class Swagger2 { @Bean
public Docket config() {
return new Docket(DocumentationType.SWAGGER_2)
.apiInfo(apiInfo())
.useDefaultResponseMessages(false)
.select()
.apis(RequestHandlerSelectors.basePackage("com.pxx.xxx.controller"))
.build();
}
//构建Api文档的详细信息函数
private ApiInfo apiInfo() {
return new ApiInfoBuilder()
.title("Blog系统API文档")
.contact(new Contact("作者", "访问地址", "联系方式"))
.build();
}
}

通过@Configuration注解,让Spring来加载该类配置,@EnableSwagger2注解来启用Swagger2。

再通过createRestApi函数创建Docket的Bean之后,apiInfo()用来创建该Api的基本信息(这些基本信息会展现在文档页面中)。select()函数返回一个ApiSelectorBuilder实例用来控制哪些接口暴露给Swagger来展现,本例采用指定扫描的包路径来定义,Swagger会扫描该包下所有Controller定义的API,并产生文档内容(除了被@ApiIgnore注解的API)

PS:这里需要注意的是.apis(RequestHandlerSelectors.basePackage("com.pxx.xxx.controller")) 指定了 Swagger 的扫描包名, 假如不指定此项, 在 Spring Boot 项目中, 会生成 base-err-controller 的 api 接口项。

访问地址

Ok. 接下来运行项目, 访问 http://项目启动地址/v2/api-docs , 就可以访问到生成的文档的json结构. (如下图 )

具体结构可参阅 Swagger官方示例

Swagger UI地址: 访问 http://项目启动地址//swagger-ui.html

注解

OK. 现在所有工作基本就绪,通过添加相应注解就可以快速生成相关接口文档, 这也是个人认为比较好的一点。

这里开始编写自己的RESTful Controller,跟正常开发没什么区别。主要是接口方法上面新增了几个注解:

  • 通过@ApiOperation注解来给API增加说明
  • 通过@ApiImplicitParams、@ApiImplicitParam注解来给参数增加说明
  • 通过@ApiIgnore来忽略那些不想让生成RESTful API文档的接口
@Api(description = "文章操作相关接口")
@RestController
@RequestMapping("/article")
public class ArticleController {
private final Logger logger = LoggerFactory.getLogger(ArticleController.class); @Autowired
private BlogService blogService; @Autowired
private JsonMapper jsonMapper; @Autowired
private Environment env; @Autowired
private PxxHttp pxxHttp; @ApiOperation(value="创建文章", notes="")
@RequestMapping(value = {"/create"} , method = RequestMethod.POST)
MessageModel create(@ApiParam @RequestParam("params") String params) throws IOException { return result;
} @ApiOperation(value="更新文章", notes="")
@RequestMapping(value = "/update", method = RequestMethod.POST)
public @ResponseBody
MessageModel update(@ApiParam @RequestParam("params") String params) throws Exception { return result;
} @ApiOperation(value="mns更新文章", notes="")
@RequestMapping(value = "/updatearticle", method = RequestMethod.POST)
public @ResponseBody
MessageModel updateArticle(@ApiParam @RequestParam("params") String params) throws Exception { return result;
} }
  • @Api(description = "") : 对整个 Controller 的定义做一个解释
  • @ApiOperation(value="", notes="") : 对 Controller 内 function 定义的内容作一解释
  • @ApiParam : 添加到参数前, Swagger 会自动生成 API 文档中对参数的标示

 demo:
   Swagger2: 
package com.osp.ethscan.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.service.Contact;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spring.web.plugins.Docket;
import springfox.documentation.swagger2.annotations.EnableSwagger2; /**
*
* @author zhangmingcheng
* @date 2018年9月25日
*/
@Configuration
@EnableSwagger2
public class Swagger2 { @Bean
public Docket createRestApi() {
return new Docket(DocumentationType.SWAGGER_2).apiInfo(apiInfo()).select()
.apis(RequestHandlerSelectors.basePackage("com.osp.ethscan.controller")).paths(PathSelectors.any())
.build();
} /**
* 构建Api文档的详细信息函数
*
* @return
*/
private ApiInfo apiInfo() {
return new ApiInfoBuilder().title("osp-etherscan api文档")
.description("简单优雅的restful风格,https://www.cnblogs.com/zhangmingcheng")
.contact(new Contact("zmcheng", "", ""))
.termsOfServiceUrl("https://www.cnblogs.com/zhangmingcheng").version("1.0").build();
}
}

   Controller: 

package com.osp.ethscan.controller;

import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController; import com.osp.ethscan.entity.UserEntity;
import com.osp.ethscan.mapper.UserMapper;
import com.osp.ethscan.service.MailService; import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiOperation;
import springfox.documentation.annotations.ApiIgnore; @Api(description = "springboot学习测试相关接口")
@RestController
@RequestMapping(value = "/books")
public class UserController { @Autowired
private UserMapper userMapper; @Autowired
private MailService mailService; @ApiOperation(value = "获取用户列表", notes = "")
@RequestMapping(value = "/getUsers", method = { RequestMethod.GET })
public List<UserEntity> getUsers() {
List<UserEntity> users = userMapper.getAll();
mailService.sendSimpleMail("18753377530@163.com", "test simple mail", " hello this is simple mail");
return users;
} // 如果请求参数在url上,@ApiImplicitParam上加paramType = "path"
@RequestMapping(value = "/{id}", method = { RequestMethod.GET })
@ApiImplicitParam(name = "id", value = "用户ID", required = true, dataType = "Long", paramType = "path")
@ApiOperation(value = "获取用户信息", notes = "根据url的id来获取用户信息")
public UserEntity getUser(@PathVariable Long id) {
UserEntity user = userMapper.getOne(id);
return user;
} @RequestMapping("/add")
public void save(UserEntity user) {
userMapper.insert(user);
} @ApiIgnore // 使用该注解忽略这个API
@RequestMapping(value = "update")
public void update(UserEntity user) {
userMapper.update(user);
} @ApiIgnore // 使用该注解忽略这个API
@RequestMapping(value = "/delete/{id}")
public void delete(@PathVariable("id") Long id) {
userMapper.delete(id);
} }

Swagger2 生成 Spring Boot API 文档的更多相关文章

  1. Swagger2生成后台的API文档

    添加依赖: <!--Swagger2API生成--> <dependency> <groupId>io.springfox</groupId> < ...

  2. SpringBoot入门教程(二十)Swagger2-自动生成RESTful规范API文档

    Swagger2 方式,一定会让你有不一样的开发体验:功能丰富 :支持多种注解,自动生成接口文档界面,支持在界面测试API接口功能:及时更新 :开发过程中花一点写注释的时间,就可以及时的更新API文档 ...

  3. Spring Boot 2.x基础教程:使用Swagger2构建强大的API文档

    随着前后端分离架构和微服务架构的流行,我们使用Spring Boot来构建RESTful API项目的场景越来越多.通常我们的一个RESTful API就有可能要服务于多个不同的开发人员或开发团队:I ...

  4. 使用apidoc 生成Restful web Api文档——新手问题与解决方法

    使用apidoc工具来给项目做接口文档,不仅有合理的源码注释,还可以生成对应的文档.是给源码写备注的一个极佳实践. 工具名称:apiDoc Git地址:https://github.com/apido ...

  5. apidoc 生成Restful web Api文档

    在服务器项目开发过程中,总会牵扯到接口文档的设计与编写,之前使用的都是office写一个文档,不够直观.下面介绍一种工具生成Apidoc.,该工具是Nodejs的模块,请务必在使用前安装好nodejs ...

  6. 使用apidoc 生成Restful web Api文档

    在项目开发过程中,总会牵扯到接口文档的设计与编写,之前使用的都是office工具,写一个文档,总也是不够漂亮和直观.好在git上的开源大神提供了生成文档的工具,so来介绍一下! 该工具是Nodejs的 ...

  7. Api文档生成工具与Api文档的传播(pdf)

    点击查看apidoc生成文档demo 1 环境和工具 win10 apidoc:注释生成api文档 wkhtmltopdf:apidoc生成的是html,不适合传播,于是通过wkhtmltopdf将h ...

  8. spring boot:swagger3文档展示分页和分栏的列表数据(swagger 3.0.0 / spring boot 2.3.3)

    一,什么情况下需要展示分页和分栏的数据的文档? 分页时,页面上展示的是同一类型的列表的数据,如图: 分栏时,每行都是一个列表,而且展示的数据类型也可能不同 这也是两种常用的数据返回形式 说明:刘宏缔的 ...

  9. SpringBoot中使用springfox+swagger2书写API文档

    随着前后端的分离,借口文档变的尤其重要,springfox是通过注解的形式自动生成API文档,利用它,可以很方便的书写restful API,swagger主要用于展示springfox生成的API文 ...

随机推荐

  1. Supervisor安装与配置(非守护进程管理工具)

    http://blog.csdn.net/xyang81/article/details/51555473

  2. 【RF库Collections测试】Get Dictionary Values

    Name:Get Dictionary ValuesSource:Collections <test library>Arguments:[ dictionary ]Returns val ...

  3. Google Inc.:Google APIs:23' 解决方案

    在导入一个项目是,出现 Unable to resolve target 'Google Inc.:Google APIs:6'第一种解决方法: compileSdkVersion 23 改成 com ...

  4. imx6ul开发板

    Feescale飞思卡尔于发布全新的基于ARM Cortex-A7核心的低功耗处理器i.MX6UL,主要面向车载信息处理.家庭能源管理系统.工控领域.物联网网关等应用.具有可扩展性.高性能和低功耗特性 ...

  5. eclipse的.properties文件中文显示问题

    eclipse的.properties文件,默认的编码方式是iso-8859-1. 所以中文显示有问题. 按照下面的方式,把Default Encoding修改成UTF-8就可以了.

  6. IIS禁止xml文件访问

    今天在出现数据库账号信息泄露的时候,突然想到xml文件里面放着很多信息,而且网页能够直接访问到,这就很有问题了 开始的时候,也在IIS网站那里看到请求筛选这个设置,开始还以为不能加呢,还是同事说的.

  7. saltstack安装

    环境: 172.16.202.104 stack-master 172.16.202.108 stack-node01 172.16.202.105 stack-node02 安装 导入yum源认证的 ...

  8. 【jQuery系列之插件】jquery插件之jquery-validation

    equalTo方法: equalTo: function( value, element, param ) { // Bind to the blur event of the target in o ...

  9. 图的建立(邻接矩阵)+深度优先遍历+广度优先遍历+Prim算法构造最小生成树(Java语言描述)

    主要参考资料:数据结构(C语言版)严蔚敏   ,http://blog.chinaunix.net/uid-25324849-id-2182922.html   代码测试通过. package 图的建 ...

  10. 【文智背后的奥秘】系列篇——基于CRF的人名识别

    版权声明:本文由文智原创文章,转载请注明出处: 文章原文链接:https://www.qcloud.com/community/article/133 来源:腾云阁 https://www.qclou ...