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

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. Python使用socketServer包搭建简易服务器过程详解

    官方提供了socketserver包去方便我们快速的搭建一个服务器框架. 很多人学习python,不知道从何学起.很多人学习python,掌握了基本语法过后,不知道在哪里寻找案例上手.很多已经做案例的 ...

  2. Golang | 既是接口又是类型,interface是什么神仙用法?

    本文始发于个人公众号:TechFlow,原创不易,求个关注 今天是golang专题的第12篇文章,我们来继续聊聊interface的使用. 在上一篇文章当中我们介绍了面向对象的一些基本概念,以及gol ...

  3. 漏洞重温之XSS(上)

    漏洞简介 跨站脚本攻击(XSS)是指恶意攻击者往Web页面里插入恶意Script代码,当用户浏览页面之时,嵌入web网页中的script代码会被执行,从而达到恶意攻击用户的目的. XSS漏洞通常是通过 ...

  4. 配置 Eureka Server 集群

    简介 为了使 Eureka Server 实现高可用,我们需要为它配置集群.这样当有一台 Eureka Server 有故障时,集群中的其他 Server 可以进行代替.Eureka 集群之中的 No ...

  5. MSDN 无法显示的问题 2010-03-21 21:08

    MSDN 无法显示的问题regsvr32 "C:\Program Files\Common Files\Microsoft Shared\Help\hxds.dll" .试图运行项 ...

  6. three.js 利用uv和ThreeBSP制作一个快递柜

    最近有three网友,问我要不要学习blender,其实我感觉学习一下也无妨,不过花大量时间精通,尚可不必,术业有专攻给别人留一条路吧,哈哈.那我我们就是用ThreeBSP和uv贴图的知识来制作一个定 ...

  7. hiho一下第零周(题目1 : A + B)

    #include<iostream> using namespace std; int main() { int a,b; while(cin>>a>>b) cou ...

  8. 开发APP遇到的问题

    1.代码尽量复用 2.调用高德地图,直辖市等,省字段一定有值,市可能为空(pro:'北京市',city:[]) 3.支付密码不用组件 <template> <view> < ...

  9. linux驱动之定时器的介绍和内核时间的学习

    本文章摘自下面的网友: http://blog.sina.com.cn/s/blog_6e5b342e0100m87d.html 一.内核中如何记录时间 任何程序都需要时间控制,其主要目的是: 测量时 ...

  10. golang学习笔记:Interface类型断言详情

    原文链接:https://www.2cto.com/kf/201712/703563.html 1. 用于判断变量类型 demo如下: switch t := var.(type){ case str ...