前言
我们在上篇文章《Swagger简介:前后端分离生成接口文档的工具》中已经介绍了Swagger的诸多优点。Swagger基本支持所有语言,但最重要的是它可以在Java中与SpringMVC完美结合!那么这篇文章就介绍如何在SpringMVC中使用Swagger!
导入Swagger包
如果是Maven项目,将在pom.xml文件中写入如下配置:

如果非Maven项目,可直接下载对应版本Jar包导入项目即可。
创建配置文件
在项目中创建“SwaggerConfiguration”和“SwaggerWebMvcConfigurerAdapter”配置文件。项目目录结构可与下图不同(可不必一定在config目录下)。

SwaggerConfiguration文件内容如下图所示:

SwaggerWebMvcConfigurerAdapter文件内容如下图所示:

其中@ComponentScan注解的basePackages属性需要填写Controller所在路径。
我们要保证Spring能够扫描到我们的配置信息,在Spring或SpringMVC中配置如下图(可单独制定路径)。

运行程序后我们就可以在项目根路径下访问到swagger-ui.html页面了,地址如:http://localhost:8080/SwaggerDemo/swagger-ui.html。
Swagger的使用
Swagger通过注解生成API文档,我们只需要在方法和实体类上增加简单的注解即可做到。
我们先来看看Swagger的主页:

要想Swagger扫描到上图的Controller,需要在Controller中的类名上加入@Controller,同时Controller的简介需要用到Swagger提供的@Api 注解:
实际应用:
@Controller
@RequestMapping("/login")
@Api(tags = "用户注册登录")
public class LoginController {
....
}
这样就可以在生成的页面上展示相应的文档内容了。
下面介绍Swagger的几个常用注解,包含我们上文所展示的@Api还有其他几个注解:
@Api:修饰整个类,描述Controller的作用
@ApiOperation:描述一个类的一个方法,或者说一个接口
@ApiParam:单个参数描述
@ApiModel:用对象来接收参数
@ApiProperty:用对象接收参数时,描述对象的一个字段
@ApiOperation注解具体应用:

这个注解会在Swagger页面中的单个方法生成对应“方法访问动词”、“方法简述”、“方法详细描述”。

@ApiParam注解具体应用:

针对每个参数增加注解@ApiParam,会在Swagger测试页面中生成对应“参数名”、“参数说明”、“参数类型”。这些有助于进行单元测试,非常实用!

@ApiModel和@ApiProperty注解具体应用:
当我们需要用一个对象作为接收参数或者返回值时,Swagger也准备了对应的注解供我们使用,当我们创建一个Bean类作为规定返回值结构时:

增加@ApiModel注解对类进行说明,同时我们增加一些属性并使用@ApiProperty对属性进行说明。

最终的结果是在Swagger规定某个方法的返回值时可以展示其具体信息:

点击 Model Schema可以展示具体结构:

同时当我们将声明好的对象作为参数传递时,Swagger也能对参数进行解析,便于单元测试,如我们添加一个收货地址类:


然后我们将其作为参数:

最终的Swagger会生成如下界面:

Swagger会将其参数完全解析出来,很棒吧!
Swagger生成API文档原理
那么,这么强大的Swagger是如何生成API文档的呢?
其实Swagger是通过程序中的注解生成Swagger需要的Json串,然后静态页面通过解析Json串生成我们要的API文档。这也是本文开篇时所说的,为什么Swagger基本能支持所有语言的原因!本质上,Swagger是依赖Json串进行展示的。
那么Swagger所依赖的Json串到底是什么样子呢?我大概截一部分图来展示吧!

原始文档为:
Swagger的其他产品:
我们之前所介绍的都是Swagger-UI,那么Swagger还有能对Swagger串进行编辑的工具并展示视图的Swagger Editor 。 还有能生成不同平台客户端代码的Swagger Codegen。
这些程序都非常强大,未来有机会会分享给大家,希望大家对我这次的分享比较满意,感谢大家!
ps:最近由于工作和私人原因,更新缓慢,在此给期待我们更新的朋友们致以最真诚的抱歉,并且保证在事情解决之后加倍努力更新,争取写出更好的文章,给大家更好的阅读体验。感谢大家长期以来的支持,谢谢!




