转载请标明出处:

原文首发于:https://www.fangzhipeng.com/springboot/2017/07/11/springboot-swagger2/

本文出自方志朋的博客

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

一、引入依赖

  1. <dependency>
  2. <groupId>io.springfox</groupId>
  3. <artifactId>springfox-swagger2</artifactId>
  4. <version>2.6.1</version>
  5. </dependency>
  6. <dependency>
  7. <groupId>io.springfox</groupId>
  8. <artifactId>springfox-swagger-ui</artifactId>
  9. <version>2.6.1</version>
  10. </dependency>

二、写配置类

  1. @Configuration
  2. @EnableSwagger2
  3. public class Swagger2 {
  4. @Bean
  5. public Docket createRestApi() {
  6. return new Docket(DocumentationType.SWAGGER_2)
  7. .apiInfo(apiInfo())
  8. .select()
  9. .apis(RequestHandlerSelectors.basePackage("com.forezp.controller"))
  10. .paths(PathSelectors.any())
  11. .build();
  12. }
  13. private ApiInfo apiInfo() {
  14. return new ApiInfoBuilder()
  15. .title("springboot利用swagger构建api文档")
  16. .description("简单优雅的restfun风格,http://blog.csdn.net/forezp")
  17. .termsOfServiceUrl("http://blog.csdn.net/forezp")
  18. .version("1.0")
  19. .build();
  20. }
  21. }

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

三、写生产文档的注解

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

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

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

  1. package com.forezp.controller;
  2. import com.forezp.entity.Book;
  3. import io.swagger.annotations.ApiImplicitParam;
  4. import io.swagger.annotations.ApiImplicitParams;
  5. import io.swagger.annotations.ApiOperation;
  6. import org.springframework.ui.ModelMap;
  7. import org.springframework.web.bind.annotation.*;
  8. import springfox.documentation.annotations.ApiIgnore;
  9. import java.util.*;
  10. /**
  11. * 用户创建某本图书 POST /books/
  12. * 用户修改对某本图书 PUT /books/:id/
  13. * 用户删除对某本图书 DELETE /books/:id/
  14. * 用户获取所有的图书 GET /books
  15. * 用户获取某一图书 GET /Books/:id
  16. * Created by fangzhipeng on 2017/4/17.
  17. * 官方文档:http://swagger.io/docs/specification/api-host-and-base-path/
  18. */
  19. @RestController
  20. @RequestMapping(value = "/books")
  21. public class BookContrller {
  22. Map<Long, Book> books = Collections.synchronizedMap(new HashMap<Long, Book>());
  23. @ApiOperation(value="获取图书列表", notes="获取图书列表")
  24. @RequestMapping(value={""}, method= RequestMethod.GET)
  25. public List<Book> getBook() {
  26. List<Book> book = new ArrayList<>(books.values());
  27. return book;
  28. }
  29. @ApiOperation(value="创建图书", notes="创建图书")
  30. @ApiImplicitParam(name = "book", value = "图书详细实体", required = true, dataType = "Book")
  31. @RequestMapping(value="", method=RequestMethod.POST)
  32. public String postBook(@RequestBody Book book) {
  33. books.put(book.getId(), book);
  34. return "success";
  35. }
  36. @ApiOperation(value="获图书细信息", notes="根据url的id来获取详细信息")
  37. @ApiImplicitParam(name = "id", value = "ID", required = true, dataType = "Long",paramType = "path")
  38. @RequestMapping(value="/{id}", method=RequestMethod.GET)
  39. public Book getBook(@PathVariable Long id) {
  40. return books.get(id);
  41. }
  42. @ApiOperation(value="更新信息", notes="根据url的id来指定更新图书信息")
  43. @ApiImplicitParams({
  44. @ApiImplicitParam(name = "id", value = "图书ID", required = true, dataType = "Long",paramType = "path"),
  45. @ApiImplicitParam(name = "book", value = "图书实体book", required = true, dataType = "Book")
  46. })
  47. @RequestMapping(value="/{id}", method= RequestMethod.PUT)
  48. public String putUser(@PathVariable Long id, @RequestBody Book book) {
  49. Book book1 = books.get(id);
  50. book1.setName(book.getName());
  51. book1.setPrice(book.getPrice());
  52. books.put(id, book1);
  53. return "success";
  54. }
  55. @ApiOperation(value="删除图书", notes="根据url的id来指定删除图书")
  56. @ApiImplicitParam(name = "id", value = "图书ID", required = true, dataType = "Long",paramType = "path")
  57. @RequestMapping(value="/{id}", method=RequestMethod.DELETE)
  58. public String deleteUser(@PathVariable Long id) {
  59. books.remove(id);
  60. return "success";
  61. }
  62. @ApiIgnore//使用该注解忽略这个API
  63. @RequestMapping(value = "/hi", method = RequestMethod.GET)
  64. public String jsonTest() {
  65. return " hi you!";
  66. }
  67. }

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

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

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

四、参考资料

swagger.io

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




扫码关注公众号有惊喜

(转载本站文章请注明作者和出处 方志朋的博客

SpringBoot非官方教程 | 第十一篇:springboot集成swagger2,构建优雅的Restful API的更多相关文章

  1. (转) SpringBoot非官方教程 | 第十一篇:springboot集成swagger2,构建优雅的Restful API

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

  2. Spring Boot2 系列教程 (四) | 集成 Swagger2 构建强大的 RESTful API 文档

    前言 快过年了,不知道你们啥时候放年假,忙不忙.反正我是挺闲的,所以有时间写 blog.今天给你们带来 SpringBoot 集成 Swagger2 的教程. 什么是 Swagger2 Swagger ...

  3. 集成 Swagger2 构建强大的 RESTful API 文档

    微信公众号:一个优秀的废人如有问题或建议,请后台留言,我会尽力解决你的问题. 前言 快过年了,不知道你们啥时候放年假,忙不忙.反正我是挺闲的,所以有时间写 blog.今天给你们带来 SpringBoo ...

  4. SpringBoot非官方教程 | 第二十一篇: springboot集成JMS

    转载请标明出处: http://blog.csdn.net/forezp/article/details/71024024 本文出自方志朋的博客 springboot对JMS提供了很好的支持,对其做了 ...

  5. Spring Boot教程(二十三)使用Swagger2构建强大的RESTful API文档(2)

    添加文档内容 在完成了上述配置后,其实已经可以生产文档内容,但是这样的文档主要针对请求本身,而描述主要来源于函数等命名产生,对用户并不友好,我们通常需要自己增加一些说明来丰富文档内容.如下所示,我们通 ...

  6. (转)第十一篇:springboot集成swagger2,构建优雅的Restful API

    声明:本部分内容均转自于方志明博友的博客,因为本人很喜欢他的博客,所以一直在学习,转载仅是记录和分享,若也有喜欢的人的话,可以去他的博客首页看:http://blog.csdn.net/forezp/ ...

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

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

  8. (转)SpringBoot非官方教程 | 第七篇:springboot开启声明式事务

    springboot开启事务很简单,只需要一个注解@Transactional 就可以了.因为在springboot中已经默认对jpa.jdbc.mybatis开启了事事务,引入它们依赖的时候,事物就 ...

  9. SpringBoot非官方教程 | 第二十三篇: 异步方法

    转载请标明出处: 原文首发于https://www.fangzhipeng.com/springboot/2017/07/11/springboot-ansy/ 本文出自方志朋的博客 这篇文章主要介绍 ...

随机推荐

  1. python 批量ping服务器

    最近在https://pypi.python.org/pypi/mping/0.1.2找到了一个python包,可以用它来批量ping服务器,它是中国的大神写的,支持单个服务器.将服务器IP写在txt ...

  2. JS常用的设计模式(5)——代理模式

    代理模式的定义是把对一个对象的访问, 交给另一个代理对象来操作. 举一个例子, 我在追一个MM想给她送一束花,但是我因为我性格比较腼腆,所以我托付了MM的一个好朋友来送. 这个例子不是非常好, 至少我 ...

  3. 微信小程序开发踩坑记录

    1.由于小程序wx.request()方法是异步的,在app.js执行ajax后,各分页加载app.js的全局数据时,无法按顺序加载.例: //app.js App({ ajax:function() ...

  4. linq(查询)

    1.改变数据库某一字段的属性 db.tableName.ToList().ForEach(x => x.State = false); 2.排序 db.tableName..toList().O ...

  5. tomcat server 报错之 More than the maximum allowed number of cookies

    More than the maximum allowed number of cookies EVERE: Error processing request java.lang.IllegalArg ...

  6. WinSock2 API

    title: WinSock2 API tags: [WinSock, 网络编程, WinSock2.0 API, 动态加载, WinSock 异步函数] date: 2018-07-21 10:36 ...

  7. vue+rest-framework前后端分离整合

    一.vue部分 二.django路由配置 (1)项目urls.py修改如下: from django.conf.urls import url, include urlpatterns = [ # p ...

  8. SQLAlchemy的使用---外键ForeignKey数据库创建与连接

    # 一对多建表操作 from sqlalchemy.ext.declarative import declarative_base Base = declarative_base() from sql ...

  9. 【代码笔记】Java Web初入:XML的进一步深入了解

    2015-12-25 文件名    guojia.xml <?xml version="1.0" encoding="GB2312"?> <! ...

  10. JavaScript简易动画

    <p id="s">fly</p> <script> function move(){ var id=document.getElementBy ...