springboot集成swagger2,构建优雅的Restful API

转载请标明出处:
原文首发于:https://www.fangzhipeng.com/springboot/2017/07/11/springboot-swagger2/
本文出自方志朋的博客

swagger,中文“拽”的意思。它是一个功能强大的api框架,它的集成非常简单,不仅提供了在线文档的查阅,而且还提供了在线文档的测试。另外swagger很容易构建restful风格的api,简单优雅帅气,正如它的名字。

一、引入依赖

     <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>

二、写配置类

@Configuration
@EnableSwagger2
public class Swagger2 {@Beanpublic Docket createRestApi() {return new Docket(DocumentationType.SWAGGER_2).apiInfo(apiInfo()).select().apis(RequestHandlerSelectors.basePackage("com.forezp.controller")).paths(PathSelectors.any()).build();}private ApiInfo apiInfo() {return new ApiInfoBuilder().title("springboot利用swagger构建api文档").description("简单优雅的restfun风格,http://blog.csdn.net/forezp").termsOfServiceUrl("http://blog.csdn.net/forezp").version("1.0").build();}
}

通过@Configuration注解,表明它是一个配置类,@EnableSwagger2开启swagger2。apiINfo()配置一些基本的信息。apis()指定扫描的包会生成文档。

三、写生产文档的注解

swagger通过注解表明该接口会生成文档,包括接口名、请求方法、参数、返回信息的等等。

  • @Api:修饰整个类,描述Controller的作用
  • @ApiOperation:描述一个类的一个方法,或者说一个接口
  • @ApiParam:单个参数描述
  • @ApiModel:用对象来接收参数
  • @ApiProperty:用对象接收参数时,描述对象的一个字段
  • @ApiResponse:HTTP响应其中1个描述
  • @ApiResponses:HTTP响应整体描述
  • @ApiIgnore:使用该注解忽略这个API
  • @ApiError :发生错误返回的信息
  • @ApiParamImplicitL:一个请求参数
  • @ApiParamsImplicit 多个请求参数

现在通过一个栗子来说明:

package com.forezp.controller;import com.forezp.entity.Book;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.*;
import springfox.documentation.annotations.ApiIgnore;import java.util.*;/*** 用户创建某本图书   POST    /books/* 用户修改对某本图书  PUT /books/:id/* 用户删除对某本图书  DELETE  /books/:id/* 用户获取所有的图书 GET /books*  用户获取某一图书  GET /Books/:id* Created by fangzhipeng on 2017/4/17.* 官方文档:http://swagger.io/docs/specification/api-host-and-base-path/*/
@RestController
@RequestMapping(value = "/books")
public class BookContrller {Map<Long, Book> books = Collections.synchronizedMap(new HashMap<Long, Book>());@ApiOperation(value="获取图书列表", notes="获取图书列表")@RequestMapping(value={""}, method= RequestMethod.GET)public List<Book> getBook() {List<Book> book = new ArrayList<>(books.values());return book;}@ApiOperation(value="创建图书", notes="创建图书")@ApiImplicitParam(name = "book", value = "图书详细实体", required = true, dataType = "Book")@RequestMapping(value="", method=RequestMethod.POST)public String postBook(@RequestBody Book book) {books.put(book.getId(), book);return "success";}@ApiOperation(value="获图书细信息", notes="根据url的id来获取详细信息")@ApiImplicitParam(name = "id", value = "ID", required = true, dataType = "Long",paramType = "path")@RequestMapping(value="/{id}", method=RequestMethod.GET)public Book getBook(@PathVariable Long id) {return books.get(id);}@ApiOperation(value="更新信息", notes="根据url的id来指定更新图书信息")@ApiImplicitParams({@ApiImplicitParam(name = "id", value = "图书ID", required = true, dataType = "Long",paramType = "path"),@ApiImplicitParam(name = "book", value = "图书实体book", required = true, dataType = "Book")})@RequestMapping(value="/{id}", method= RequestMethod.PUT)public String putUser(@PathVariable Long id, @RequestBody Book book) {Book book1 = books.get(id);book1.setName(book.getName());book1.setPrice(book.getPrice());books.put(id, book1);return "success";}@ApiOperation(value="删除图书", notes="根据url的id来指定删除图书")@ApiImplicitParam(name = "id", value = "图书ID", required = true, dataType = "Long",paramType = "path")@RequestMapping(value="/{id}", method=RequestMethod.DELETE)public String deleteUser(@PathVariable Long id) {books.remove(id);return "success";}@ApiIgnore//使用该注解忽略这个API@RequestMapping(value = "/hi", method = RequestMethod.GET)public String  jsonTest() {return " hi you!";}
}

通过相关注解,就可以让swagger2生成相应的文档。如果你不需要某接口生成文档,只需要在加@ApiIgnore注解即可。需要说明的是,如果请求参数在url上,@ApiImplicitParam 上加paramType = “path” 。

启动工程,访问:http://localhost:8080/swagger-ui.html ,就看到swagger-ui:

整个集成过程非常简单,但是我看了相关的资料,swagger没有做安全方面的防护,可能需要我们自己做相关的工作。

四、参考资料

swagger.io

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

springboot集成swagger2,构建优雅的Restful API相关推荐

  1. SpringBoot第十一篇:springboot集成swagger2,构建优雅的Restful API

    swagger,中文"拽"的意思.它是一个功能强大的api框架,它的集成非常简单,不仅提供了在线文档的查阅,而且还提供了在线文档的测试.另外swagger很容易构建restful风 ...

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

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

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

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

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

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

  5. 13.9 SpringBoot集成Swagger2中遇到的问题

    13.9 SpringBoot集成Swagger2中遇到的问题 我们在使用SpringBoot集成Swagger2中,访问:http://127.0.0.1:8188/swagger-ui.html ...

  6. SpringBoot集成Swagger2自动生成友好的RestApi测试页面及文档

    springBoot集成swagger2 水煮鱼又失败了 https://www.jianshu.com/p/002ce2f26103 1 背景 springBoot作为微服务首选框架,为其他服务提供 ...

  7. SpringBoot集成Swagger2与Swagger3的区别

    SpringBoot集成Swagger2与Swagger3的区别 前言 一.pom文件中引入Swagger依赖 Swagger2 Swagger3 二.Swagger配置 Swagger2 Swagg ...

  8. springboot集成swagger2测试接口

    springboot集成swagger2测试接口 1.需要的依赖 2.开始编写一个swagger2 3.演示效果图片 1.需要的依赖 <dependency><groupId> ...

  9. 【快速上手系列】使用Springboot集成Swagger2的简单使用测试

    [快速上手系列]使用Springboot集成Swagger2的简单使用测试 简介 Swagger2是为了解决企业中接口(api)中定义统一标准规范的文档生成工具. 尤其是前后端分离时对一些业务接口也不 ...

最新文章

  1. Tableau实战系列浏览 Tableau 环境(二) -工作区域
  2. HTML5学习笔记简明版(9):变化的元素和属性
  3. 博图程序需要手动同步_贴吧求助帖博图实例单按钮控制灯的程序
  4. 使用Spring Security保护REST服务
  5. 超负荷写代码 = 慢性自杀
  6. JDK的可视化工具系列 (四) JConsole、VisualVM
  7. 查看及修改当前数据库的所支持的数据库引擎以及默认数据库引擎
  8. python刷今日头条阅读量_教你如何提高今日头条号推荐量阅读量播放量
  9. java day37【web相关概念回顾 、web服务器软件:Tomcat 、Servlet入门学习】
  10. SOTA级发丝抠图模型PP-Matting开源,支持多场景精细化分割
  11. android获取手机状态栏高度,Android 获取屏幕高度,宽度,状态栏高度
  12. Zookeeper总结——知识点、选举机制、客户端操作及写数据流程、API操作、zookeeper分布式锁之 Curator、ZAB协议、CAP理论之zookeeper的CP理论
  13. 移动通信网络规划:信道编码
  14. 电气防火限流式保护器及其过电流故障检测方法
  15. 台式电脑硬件维修操作规范
  16. 威联通nas利用calibre-web搭建个人数字图书管理系统
  17. Android 7.0 插卡后APN信息的加载流程、UI界面编辑APN的流程及Android中APN配置相关的漏洞
  18. 访问web页面出现Whitelabel Error Page原因
  19. C++ 对 C 兼容是什么意思?
  20. COVID-19 疫苗:在你接种疫苗之后

热门文章

  1. 的生物合成方式主要包括_J EXP BOT 综述| 植物次级代谢产物在调控微生物组组分及功能中的作用...
  2. c++如何获取文件时间_3分钟短文 | PHP 如何优雅地获取文件扩展名?别再explode了
  3. 向shell脚本中传入参数
  4. 内核同步机制-信号量(semaphore)
  5. 计算机程序制作的小作品,义乌市中小学生电脑作品制作比赛201203
  6. 特斯拉正加快部署第三代Autopilot自动驾驶计算机
  7. 处理table 超出部分滚动问题
  8. python-MYSQL(包括ORM)交互
  9. 页面切换主题风格,利用本地缓存
  10. bzoj2127: happiness