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

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

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

一个好的HTTP接口文档描述

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

SpringBoot集成Swagger

项目引入依赖

        <dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger2</artifactId>
<version>2.9.2</version>
</dependency>
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger-ui</artifactId>
<version>2.9.2</version>
</dependency>
<dependency>
<groupId>com.github.xiaoymin</groupId>
<artifactId>knife4j-spring-ui</artifactId>
<version>2.0.4</version>
</dependency>

SpringBoot关于Swagger配置

把此Swagger配置粘入项目即可

@EnableSwagger2
@Configuration
public class SwaggerConfig implements WebMvcConfigurer {
@Bean
public Docket createRestApi() {
return new Docket(DocumentationType.SWAGGER_2)
.apiInfo(apiInfo())
.select()
//这里改成自己的接口包名
.apis(RequestHandlerSelectors.basePackage("vip.codehome.springboot.tutorials.controller"))
.paths(PathSelectors.any())
.build();
}
private ApiInfo apiInfo() {
return new ApiInfoBuilder()
.title("SpringBoot教程接口文档")//标题
.description("使用swagger文档管理接口")//描述
.contact(new Contact("codehome", "", "dsyslove@163.com"))//作者信息
.version("1.0.0")//版本号
.build();
}
//解决doc.html,swagger-ui.html 404问题
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
registry.addResourceHandler("/**").addResourceLocations(
"classpath:/static/");
registry.addResourceHandler("swagger-ui.html").addResourceLocations(
"classpath:/META-INF/resources/");
registry.addResourceHandler("doc.html").addResourceLocations(
"classpath:/META-INF/resources/");
registry.addResourceHandler("/webjars/**").addResourceLocations(
"classpath:/META-INF/resources/webjars/"); }
}

Swagger的具体使用

各个注解的作用

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

代码示例

@RestController
@Api(tags = "Swagger注解测试类")
public class SwaggerUserController {
@ApiOperation(value = "这是一个echo接口")
@ApiImplicitParams({
@ApiImplicitParam(name = "msg",value = "请求的msg参数",required = true,paramType = "query"),
@ApiImplicitParam(name = "token",value = "请求的token",required = false,paramType ="header" )
})
@ApiResponses({
@ApiResponse(code=200,message = "请求成功"),
@ApiResponse(code=400,message="请求无权限")
})
@GetMapping("/echo")
public String echo(String msg,@RequestHeader(name = "token") String token){
return msg;
}
@PostMapping("/login")
public R<UserInfoVO> login(@RequestBody LoginDTO loginDTO){
UserInfoVO userInfoVO=new UserInfoVO();
userInfoVO.setNickname("编程之家");
userInfoVO.setToken("xxx");
return R.ok(userInfoVO);
}
}
@Data
@ApiModel
public class LoginDTO {
@ApiModelProperty(value = "用户账号或者邮箱")
String account;
@ApiModelProperty(value = "用户密码")
String passwd;
@ApiModelProperty(value = "用户密码")
String verifyCode;
}

接口文档效果

这里访问的是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. python7.2抛出自定义异常

    pwd="123456"if len(pwd)<8: ex= Exception("密码不能低于8位数!")#自定义异常 raise ex #抛出自定义的 ...

  2. python2.4项目:快递计价程序

    #开发一个快递计价程序3kg以内:东三省.宁夏.海南.12元:新疆.西藏20元:港澳台.国外:不接受:其他10元.超过3kg的部分:东三省.宁夏.海南每公斤10元:新疆.西藏每公斤20元:港澳台.国外 ...

  3. CSS页面布局与网格(下)

    3.二维布局:CSS Grid Layout CSS Grid Layout模块为了能在二维空间里控制元素的顺序.位置和大小而定义了一组CSS属性. 被设值为display: grid的元素叫网格容器 ...

  4. 详解 LSTM

    LSTM 长短时记忆网络(Long Short Term Memory Network, LSTM),是一种改进之后的循环神经网络,可以解决RNN无法处理长距离的依赖的问题,目前比较流行. 长短时记忆 ...

  5. day27:异常&反射

    目录 认识异常处理 1.程序错误的种类    2.异常的分类 3.AssertionError(断言assert语句失败) 异常处理的基本语法 1.异常处理的基本语法 2.带有分支的异常处理 3.处理 ...

  6. python 文件读写with open模式r,r+,w,w+,a,a+的区别

    模式 可做操作 若文件不存在 是否覆盖 r 只能读 报错 - r+ 可读可写 报错 是 w 只能写 创建 是 w+ 可读可写 创建 是 a 只能写 创建 否,追加写 a+ 可读可写 创建 否,追加写

  7. python关于函数调用作为参数的说明&&装饰器

    python关于函数调用作为参数的说明&&装饰器 简单的: 先看代码: def out(): print('out') def inner(): return 'inner' retu ...

  8. 学长小清新题表之UOJ 180.实验室外的攻防战

    学长小清新题表之UOJ 180.实验室外的攻防战 题目描述 时针指向午夜十二点,约定的日子--\(2\)月\(28\)日终于到来了.随着一声枪响,伏特跳蚤国王率领着他的跳蚤大军们包围了 \(picks ...

  9. Linux下mv命令高级用法

    mv 也是 Linux 下一个使用频率非常高的命令,但除了一些基本用法,你还知道它的哪些高级用法呢? 1. 基本用法 移动一个/多个文件: 移动一个/多个目录: 重命名文件/目录. 这些都是很基本的用 ...

  10. docker入门3-docker swarm

    swarm介绍 想要将应用部署在一个集群并运行在多台机器上? 通过将多台机器链接到"Dockerized"集群以实现应用程序运行在多容器,多机器的技术被称为swarm. 一个swa ...