相信无论是前端还是后端开发,都或多或少地被接口文档折磨过。前端经常抱怨后端给的接口文档与实际情况不一致。后端又觉得编写及维护接口文档会耗费不少精力,经常来不及更新。其实无论是前端调用后端,还是后端调用后端,都期望有一个好的接口文档。

SpringBoot集成Swagger能够通过很简单的注解把接口描述清楚,生成可视化文档页面。

原生的Swagger-ui界面很粗糙,这里用knife4j-spring-ui替代。

一个好的HTTP接口文档描述

  1. 写清楚接口的请求路径: QueryPath: /user/login
  2. 写清楚接口的请求方法类型: GET/POST/DELETE/PUT
  3. 写清楚接口的业务含义,使用场景
  4. 写清楚接口的入参:参数描述、参数类型、参数结构、参数是否必传
  5. 写清楚接口的返回类型:返回的数据结构,异常状况

SpringBoot集成Swagger

项目引入依赖

  1. <dependency>
  2. <groupId>io.springfox</groupId>
  3. <artifactId>springfox-swagger2</artifactId>
  4. <version>2.9.2</version>
  5. </dependency>
  6. <dependency>
  7. <groupId>io.springfox</groupId>
  8. <artifactId>springfox-swagger-ui</artifactId>
  9. <version>2.9.2</version>
  10. </dependency>
  11. <dependency>
  12. <groupId>com.github.xiaoymin</groupId>
  13. <artifactId>knife4j-spring-ui</artifactId>
  14. <version>2.0.4</version>
  15. </dependency>

SpringBoot关于Swagger配置

把此Swagger配置粘入项目即可

  1. @EnableSwagger2
  2. @Configuration
  3. public class SwaggerConfig implements WebMvcConfigurer {
  4. @Bean
  5. public Docket createRestApi() {
  6. return new Docket(DocumentationType.SWAGGER_2)
  7. .apiInfo(apiInfo())
  8. .select()
  9. //这里改成自己的接口包名
  10. .apis(RequestHandlerSelectors.basePackage("vip.codehome.springboot.tutorials.controller"))
  11. .paths(PathSelectors.any())
  12. .build();
  13. }
  14. private ApiInfo apiInfo() {
  15. return new ApiInfoBuilder()
  16. .title("SpringBoot教程接口文档")//标题
  17. .description("使用swagger文档管理接口")//描述
  18. .contact(new Contact("codehome", "", "dsyslove@163.com"))//作者信息
  19. .version("1.0.0")//版本号
  20. .build();
  21. }
  22. //解决doc.html,swagger-ui.html 404问题
  23. @Override
  24. public void addResourceHandlers(ResourceHandlerRegistry registry) {
  25. registry.addResourceHandler("/**").addResourceLocations(
  26. "classpath:/static/");
  27. registry.addResourceHandler("swagger-ui.html").addResourceLocations(
  28. "classpath:/META-INF/resources/");
  29. registry.addResourceHandler("doc.html").addResourceLocations(
  30. "classpath:/META-INF/resources/");
  31. registry.addResourceHandler("/webjars/**").addResourceLocations(
  32. "classpath:/META-INF/resources/webjars/");
  33. }
  34. }

Swagger的具体使用

各个注解的作用

  1. @Api 放在类上介绍类的作用
  2. @ApiOperation 放在方法上介绍方法的作用
  3. @ApiImplicitParam介绍入参说明
  4. @ApiResponse介绍返回状态
  5. @ApiModel、@ApiModelProperty介绍入参是对象,返回是对象字段说明

代码示例

  1. @RestController
  2. @Api(tags = "Swagger注解测试类")
  3. public class SwaggerUserController {
  4. @ApiOperation(value = "这是一个echo接口")
  5. @ApiImplicitParams({
  6. @ApiImplicitParam(name = "msg",value = "请求的msg参数",required = true,paramType = "query"),
  7. @ApiImplicitParam(name = "token",value = "请求的token",required = false,paramType ="header" )
  8. })
  9. @ApiResponses({
  10. @ApiResponse(code=200,message = "请求成功"),
  11. @ApiResponse(code=400,message="请求无权限")
  12. })
  13. @GetMapping("/echo")
  14. public String echo(String msg,@RequestHeader(name = "token") String token){
  15. return msg;
  16. }
  17. @PostMapping("/login")
  18. public R<UserInfoVO> login(@RequestBody LoginDTO loginDTO){
  19. UserInfoVO userInfoVO=new UserInfoVO();
  20. userInfoVO.setNickname("编程之家");
  21. userInfoVO.setToken("xxx");
  22. return R.ok(userInfoVO);
  23. }
  24. }
  25. @Data
  26. @ApiModel
  27. public class LoginDTO {
  28. @ApiModelProperty(value = "用户账号或者邮箱")
  29. String account;
  30. @ApiModelProperty(value = "用户密码")
  31. String passwd;
  32. @ApiModelProperty(value = "用户密码")
  33. String verifyCode;
  34. }

接口文档效果

这里访问的是http://localhost:8080/doc.html,knife4j-spring-ui还有相比原生还有更多强大的功能,大家自行发现。

千里之行,始于足下。这里是SpringBoot教程系列第二篇,所有项目源码均可以在我的GitHub上面下载源码。

springboot2.x基础教程:Swagger详解给你的接口加上文档说明的更多相关文章

  1. Java基础教程——异常处理详解

    异常处理 好程序的特性 可重用性 可维护性 可扩展性 鲁棒性 |--|--Robust的音译 |--|--健壮.强壮之意 |--|--指在异常和危险情况下系统依然能运行,不崩溃 Java中,写下如下代 ...

  2. 基础拾遗------redis详解

    基础拾遗 基础拾遗------特性详解 基础拾遗------webservice详解 基础拾遗------redis详解 基础拾遗------反射详解 基础拾遗------委托详解 基础拾遗----- ...

  3. 基础拾遗------webservice详解

    基础拾遗 基础拾遗------特性详解 基础拾遗------webservice详解 基础拾遗------redis详解 基础拾遗------反射详解 基础拾遗------委托详解 基础拾遗----- ...

  4. GitHub 使用教程图文详解(转)

    大纲: 一.前言 二.GitHub简介 三.注册GitHub账号 四.配置GitHub 五.使用GitHub 六.参与GitHub中其它开源项目 七.总结 注,GitHub官网:https://git ...

  5. GitHub 使用教程图文详解

    大纲: 一.前言 二.GitHub简介 三.注册GitHub账号 四.配置GitHub 五.使用GitHub 六.参与GitHub中其它开源项目 七.总结 注,GitHub官网:https://git ...

  6. Hadoop基础-Idea打包详解之手动添加依赖(SequenceFile的压缩编解码器案例)

    Hadoop基础-Idea打包详解之手动添加依赖(SequenceFile的压缩编解码器案例) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.编辑配置文件(pml.xml)(我 ...

  7. (转)总结之:CentOS 6.5 MySQL数据库的基础以及深入详解

    总结之:CentOS 6.5 MySQL数据库的基础以及深入详解 原文:http://tanxw.blog.51cto.com/4309543/1395539 前言 早期MySQL AB公司在2009 ...

  8. Windows Server 2008 架设 Web 服务器教程(图文详解)

    Windows Server 2008 架设 Web 服务器教程(图文详解) 一.安装 IIS 7.0 : 虽然 Windows Server 2008 内置了I IS 7.0,但是默认情况下并没有安 ...

  9. Windows系统Git安装教程(详解Git安装过程)

    Windows系统Git安装教程(详解Git安装过程)   今天更换电脑系统,需要重新安装Git,正好做个记录,希望对第一次使用的博友能有所帮助! 获取Git安装程序   到Git官网下载,网站地址: ...

随机推荐

  1. swift基础_ set get方法 理解

    swift中重写set get方法是这样的. 先定义一个变量,当调用set方法的时候,系统会有一个newValue, 将newValue赋值给我们定义的变量,然后从get方法返回去. swift中一般 ...

  2. beyond compare4 密钥 亲测可用

    beyond compare4过了试用期: 密钥: w4G-in5u3SH75RoB3VZIX8htiZgw4ELilwvPcHAIQWfwfXv5n0IHDp5hv1BM3+H1XygMtiE0-J ...

  3. Ubuntu定时执行任务(定时爬取数据)

    cron是一个Linux下的后台进程,用来定期的执行一些任务.因为我用的是Ubuntu,所以这篇文章中的所有命令也只能保证在Ubuntu下有效. 1:编辑crontab文件,用来存放你要执行的命令 s ...

  4. 微信公众号添加zip文件下载

    微信公众号添加zip文件下载的教程 我们都知道创建一个微信公众号,在公众号中发布一些文章是非常简单的,但公众号添加附件下载的功能却被限制,如今可以使用小程序“微附件”进行在公众号中添加附件.如:zip ...

  5. 盘点 35 个 Apache 顶级项目,我拜服了…

    Apache 软件基金会 Apache 软件基金会,全称:Apache Software Foundation,简称:ASF,成立于 1999 年 7 月,是目前世界上最大的最受欢迎的开源软件基金会, ...

  6. CSS卡片右上角标记样式设计

    template <div class="each-one-in-list"> <div class="show-icon">进行中&l ...

  7. .NetCore(Avalonia) 项目dll混淆,Ubuntu 或者deepin操作系统 deb安装包解压,重新打包

    .NetCore(Avalonia) 项目dll混淆,deb安装包解压,重新打包 本文分为两部分,一部分是介绍使用 DotNetReactor6.0 及以上版本混淆.netcore项目的dll. 另一 ...

  8. DPL,RPL,CPL 之间的联系和区别

    CPL是当前进程的权限级别(Current Privilege Level),是当前正在执行的代码所在的段的特权级,存在于cs寄存器的低两位. RPL说明的是进程对段访问的请求权限(Request P ...

  9. 在java中,怎样创建编写javascript的环境?

    刚开始还没有学到这一块的时候,预习的时候也是在网上搜索这一类的信息时候, 可是都是八竿子碰不到边的!在此也是呕心沥血的为读者献上最好的: 1.首先:点击空白处>右键>project: 2. ...

  10. 【算法•日更•第四十七期】Mac与windows系统的差别

    小编最近装了个Mac系统,因为小编已经有笔记本可以用linux了,所以就决定在台式机上装个双系统,结果一不小心把Mac装在C盘上了,哎,说多了都是泪啊. 其实用了Mac之后才发现windows特别好用 ...