第一节 Swagger 简介
1. 企业开发所面临的问题
在前后端分离开发的情况下,前端开发人员经常抱怨后端开发人员给的接口文档与实际情况不一致。后端开发人员觉得编写接口文档太过于消耗精力,而且更新也不及时,以至于前后端开发人员经常出现争吵的情况,为了解决这个问题,Swagger应运而生。
2. Swagger 简介
Swagger 是一个规范且完整的框架,用于生成、描述、调用和可视化 RESTful 风格的 Web 服务。Swagger 的目标是对 REST API 定义一个标准且和语言无关的接口,可以让人和计算机拥有无须访问源码、文档或网络流量监测就可以发现和理解服务的能力。当通过 Swagger 进行正确定义,用户可以理解远程服务并使用最少实现逻辑与远程服务进行交互。与为底层编程所实现的接口类似,Swagger 消除了调用服务时可能会有的猜测。
3. Swagger 的优势
4. Swagger 依赖
<span style="background-color:#f8f8f8"><span style="color:#333333"><span style="color:#117700"><</span><span style="color:#117700">dependency</span><span style="color:#117700">></span>
<span style="color:#117700"><</span><span style="color:#117700">groupId</span><span style="color:#117700">></span>io.springfox<span style="color:#117700"></</span><span style="color:#117700">groupId</span><span style="color:#117700">></span>
<span style="color:#117700"><</span><span style="color:#117700">artifactId</span><span style="color:#117700">></span>springfox-swagger2<span style="color:#117700"></</span><span style="color:#117700">artifactId</span><span style="color:#117700">></span>
<span style="color:#117700"><</span><span style="color:#117700">version</span><span style="color:#117700">></span>2.7.0<span style="color:#117700"></</span><span style="color:#117700">version</span><span style="color:#117700">></span>
<span style="color:#117700"></</span><span style="color:#117700">dependency</span><span style="color:#117700">></span>
<span style="color:#aa5500"><!--swagger-ui的jar包(里面包含了swagger的界面静态文件) --></span>
<span style="color:#117700"><</span><span style="color:#117700">dependency</span><span style="color:#117700">></span>
<span style="color:#117700"><</span><span style="color:#117700">groupId</span><span style="color:#117700">></span>io.springfox<span style="color:#117700"></</span><span style="color:#117700">groupId</span><span style="color:#117700">></span>
<span style="color:#117700"><</span><span style="color:#117700">artifactId</span><span style="color:#117700">></span>springfox-swagger-ui<span style="color:#117700"></</span><span style="color:#117700">artifactId</span><span style="color:#117700">></span>
<span style="color:#117700"><</span><span style="color:#117700">version</span><span style="color:#117700">></span>2.7.0<span style="color:#117700"></</span><span style="color:#117700">version</span><span style="color:#117700">></span>
<span style="color:#117700"></</span><span style="color:#117700">dependency</span><span style="color:#117700">></span>
<span style="color:#117700"><</span><span style="color:#117700">dependency</span><span style="color:#117700">></span>
<span style="color:#117700"><</span><span style="color:#117700">groupId</span><span style="color:#117700">></span>com.fasterxml.jackson.core<span style="color:#117700"></</span><span style="color:#117700">groupId</span><span style="color:#117700">></span>
<span style="color:#117700"><</span><span style="color:#117700">artifactId</span><span style="color:#117700">></span>jackson-databind<span style="color:#117700"></</span><span style="color:#117700">artifactId</span><span style="color:#117700">></span>
<span style="color:#117700"><</span><span style="color:#117700">version</span><span style="color:#117700">></span>2.12.5<span style="color:#117700"></</span><span style="color:#117700">version</span><span style="color:#117700">></span>
<span style="color:#117700"></</span><span style="color:#117700">dependency</span><span style="color:#117700">></span></span></span>
第二节 Swagger 注解
<span style="background-color:#f8f8f8"><span style="color:#333333"><span style="color:#555555">@Api</span> <span style="color:#aa5500">//修饰整个类,描述Controller的作用 </span>
<span style="color:#555555">@ApiOperation</span> <span style="color:#aa5500">//描述一个类中的一个方法</span>
<span style="color:#555555">@ApiParam</span> <span style="color:#aa5500">//单个参数的描述信息 </span>
<span style="color:#555555">@ApiModel</span> <span style="color:#aa5500">//用对象来接收参数 </span>
<span style="color:#555555">@ApiModelProperty</span> <span style="color:#aa5500">//用对象接收参数时,描述对象的一个字段 </span>
<span style="color:#555555">@ApiResponse</span> <span style="color:#aa5500">//HTTP响应其中1个描述 </span>
<span style="color:#555555">@ApiResponses</span> <span style="color:#aa5500">//HTTP响应整体描述 </span>
<span style="color:#555555">@ApiIgnore</span> <span style="color:#aa5500">//使用该注解忽略这个API </span>
<span style="color:#555555">@ApiError</span> <span style="color:#aa5500">//发生错误返回的信息 </span>
<span style="color:#555555">@ApiImplicitParam</span> <span style="color:#aa5500">//一个请求参数 </span>
<span style="color:#555555">@ApiImplicitParams</span> <span style="color:#aa5500">//多个请求参数的描述信息</span></span></span>
示例
<span style="background-color:#f8f8f8"><span style="color:#333333"><span style="color:#555555">@Api</span>(<span style="color:#000000">tags</span> <span style="color:#981a1a">=</span> <span style="color:#aa1111">"CommunityPersonController"</span>, <span style="color:#000000">value</span> <span style="color:#981a1a">=</span> <span style="color:#aa1111">"用户管理"</span>, <span style="color:#000000">description</span> <span style="color:#981a1a">=</span> <span style="color:#aa1111">"用户管理API"</span>)
<span style="color:#555555">@RestController</span>
<span style="color:#555555">@RequestMapping</span>(<span style="color:#aa1111">"/communityPerson"</span>)
<span style="color:#770088">public</span> <span style="color:#770088">class</span> <span style="color:#0000ff">CommunityPersonController</span> {
<span style="color:#555555">@Autowired</span>
<span style="color:#770088">private</span> <span style="color:#000000">CommunityPersonService</span> <span style="color:#000000">personService</span>;
<span style="color:#555555">@ApiOperation</span>(<span style="color:#000000">value</span> <span style="color:#981a1a">=</span> <span style="color:#aa1111">"查询小区信息"</span>)
<span style="color:#555555">@ApiImplicitParams</span>(<span style="color:#000000">value</span> <span style="color:#981a1a">=</span> {
<span style="color:#555555">@ApiImplicitParam</span>(<span style="color:#000000">paramType</span> <span style="color:#981a1a">=</span> <span style="color:#aa1111">"query"</span>, <span style="color:#000000">dataTypeClass</span> <span style="color:#981a1a">=</span> <span style="color:#000000">CommunityPersonCondition</span>.<span style="color:#770088">class</span>)
})
<span style="color:#555555">@ApiResponse</span>(<span style="color:#000000">code</span> <span style="color:#981a1a">=</span> <span style="color:#116644">200</span>, <span style="color:#000000">response</span> <span style="color:#981a1a">=</span> <span style="color:#000000">Result</span>.<span style="color:#770088">class</span>, <span style="color:#000000">message</span> <span style="color:#981a1a">=</span> <span style="color:#aa1111">"OK"</span>)
<span style="color:#555555">@GetMapping</span>
<span style="color:#770088">public</span> <span style="color:#000000">Result</span><span style="color:#981a1a"><</span><span style="color:#000000">PageInfo</span><span style="color:#981a1a"><</span><span style="color:#000000">CommunityPerson</span><span style="color:#981a1a">>></span> <span style="color:#000000">searchCommunityPersons</span>(<span style="color:#555555">@ModelAttribute</span> <span style="color:#000000">CommunityPersonCondition</span> <span style="color:#000000">personCondition</span>){
<span style="color:#770088">return</span> <span style="color:#000000">Result</span>.<span style="color:#000000">ok</span>(<span style="color:#000000">personService</span>.<span style="color:#000000">searchCommunityPersons</span>(<span style="color:#000000">personCondition</span>));
}
<span style="color:#555555">@ApiOperation</span>(<span style="color:#000000">value</span> <span style="color:#981a1a">=</span> <span style="color:#aa1111">"查询户主选项"</span>)
<span style="color:#555555">@ApiImplicitParam</span>(<span style="color:#000000">paramType</span> <span style="color:#981a1a">=</span> <span style="color:#aa1111">"header"</span>, <span style="color:#000000">dataTypeClass</span> <span style="color:#981a1a">=</span> <span style="color:#008855">String</span>.<span style="color:#770088">class</span>, <span style="color:#000000">defaultValue</span> <span style="color:#981a1a">=</span> <span style="color:#aa1111">"幸福"</span>, <span style="color:#000000">name</span> <span style="color:#981a1a">=</span> <span style="color:#aa1111">"content"</span>)
<span style="color:#555555">@ApiResponse</span>(<span style="color:#000000">code</span> <span style="color:#981a1a">=</span> <span style="color:#116644">200</span>, <span style="color:#000000">response</span> <span style="color:#981a1a">=</span> <span style="color:#000000">Result</span>.<span style="color:#770088">class</span>, <span style="color:#000000">message</span> <span style="color:#981a1a">=</span> <span style="color:#aa1111">"OK"</span>)
<span style="color:#555555">@GetMapping</span>(<span style="color:#aa1111">"/item"</span>)
<span style="color:#770088">public</span> <span style="color:#000000">Result</span><span style="color:#981a1a"><</span><span style="color:#000000">List</span><span style="color:#981a1a"><</span><span style="color:#000000">CommunityPerson</span><span style="color:#981a1a">>></span> <span style="color:#000000">getCommunityPersons</span>(<span style="color:#555555">@RequestParam</span>(<span style="color:#aa1111">"content"</span>) <span style="color:#008855">String</span> <span style="color:#000000">content</span>){
<span style="color:#770088">return</span> <span style="color:#000000">Result</span>.<span style="color:#000000">ok</span>(<span style="color:#000000">personService</span>.<span style="color:#000000">getCommunityPersons</span>(<span style="color:#000000">content</span>));
}
<span style="color:#555555">@ApiOperation</span>(<span style="color:#000000">value</span> <span style="color:#981a1a">=</span> <span style="color:#aa1111">"查询小区户主选项"</span>)
<span style="color:#555555">@ApiImplicitParam</span>(<span style="color:#000000">paramType</span> <span style="color:#981a1a">=</span> <span style="color:#aa1111">"path"</span>, <span style="color:#000000">name</span> <span style="color:#981a1a">=</span> <span style="color:#aa1111">"id"</span>, <span style="color:#000000">value</span> <span style="color:#981a1a">=</span> <span style="color:#aa1111">"id"</span>,<span style="color:#000000">dataTypeClass</span> <span style="color:#981a1a">=</span> <span style="color:#008855">String</span>.<span style="color:#770088">class</span>, <span style="color:#000000">defaultValue</span> <span style="color:#981a1a">=</span> <span style="color:#aa1111">"1"</span>)
<span style="color:#555555">@ApiResponse</span>(<span style="color:#000000">code</span> <span style="color:#981a1a">=</span> <span style="color:#116644">200</span>, <span style="color:#000000">response</span> <span style="color:#981a1a">=</span> <span style="color:#000000">Result</span>.<span style="color:#770088">class</span>, <span style="color:#000000">message</span> <span style="color:#981a1a">=</span> <span style="color:#aa1111">"OK"</span>)
<span style="color:#555555">@DeleteMapping</span>(<span style="color:#aa1111">"/{id}"</span>)
<span style="color:#770088">public</span> <span style="color:#000000">Result</span><span style="color:#981a1a"><</span><span style="color:#008855">Integer</span><span style="color:#981a1a">></span> <span style="color:#000000">deleteCommunityPerson</span>(<span style="color:#555555">@PathVariable</span>(<span style="color:#aa1111">"id"</span>)<span style="color:#008855">String</span> <span style="color:#000000">id</span>){
<span style="color:#770088">return</span> <span style="color:#000000">Result</span>.<span style="color:#000000">ok</span>(<span style="color:#000000">personService</span>.<span style="color:#000000">deleteCommunityPersonById</span>(<span style="color:#000000">id</span>));
}
<span style="color:#555555">@ApiOperation</span>(<span style="color:#000000">value</span> <span style="color:#981a1a">=</span> <span style="color:#aa1111">"添加小区成员信息"</span>)
<span style="color:#555555">@ApiImplicitParam</span>(<span style="color:#000000">paramType</span> <span style="color:#981a1a">=</span> <span style="color:#aa1111">"body"</span>, <span style="color:#000000">dataTypeClass</span> <span style="color:#981a1a">=</span> <span style="color:#000000">CommunityPerson</span>.<span style="color:#770088">class</span>)
<span style="color:#555555">@ApiResponse</span>(<span style="color:#000000">code</span> <span style="color:#981a1a">=</span> <span style="color:#116644">200</span>, <span style="color:#000000">response</span> <span style="color:#981a1a">=</span> <span style="color:#000000">Result</span>.<span style="color:#770088">class</span>, <span style="color:#000000">message</span> <span style="color:#981a1a">=</span> <span style="color:#aa1111">"OK"</span>)
<span style="color:#555555">@PostMapping</span>
<span style="color:#770088">public</span> <span style="color:#000000">Result</span><span style="color:#981a1a"><</span><span style="color:#008855">Integer</span><span style="color:#981a1a">></span> <span style="color:#000000">addCommunityPerson</span>(<span style="color:#555555">@RequestBody</span> <span style="color:#000000">CommunityPerson</span> <span style="color:#000000">person</span>){
<span style="color:#770088">return</span> <span style="color:#000000">Result</span>.<span style="color:#000000">ok</span>(<span style="color:#000000">personService</span>.<span style="color:#000000">addCommunityPerson</span>(<span style="color:#000000">person</span>));
}
<span style="color:#555555">@ApiOperation</span>(<span style="color:#000000">value</span> <span style="color:#981a1a">=</span> <span style="color:#aa1111">"修改小区成员信息"</span>)
<span style="color:#555555">@ApiImplicitParam</span>(<span style="color:#000000">paramType</span> <span style="color:#981a1a">=</span> <span style="color:#aa1111">"body"</span>, <span style="color:#000000">dataTypeClass</span> <span style="color:#981a1a">=</span> <span style="color:#000000">CommunityPerson</span>.<span style="color:#770088">class</span>)
<span style="color:#555555">@ApiResponse</span>(<span style="color:#000000">code</span> <span style="color:#981a1a">=</span> <span style="color:#116644">200</span>, <span style="color:#000000">response</span> <span style="color:#981a1a">=</span> <span style="color:#000000">Result</span>.<span style="color:#770088">class</span>, <span style="color:#000000">message</span> <span style="color:#981a1a">=</span> <span style="color:#aa1111">"OK"</span>)
<span style="color:#555555">@PutMapping</span>
<span style="color:#770088">public</span> <span style="color:#000000">Result</span><span style="color:#981a1a"><</span><span style="color:#008855">Integer</span><span style="color:#981a1a">></span> <span style="color:#000000">updateCommunityPerson</span>(<span style="color:#555555">@RequestBody</span> <span style="color:#000000">CommunityPerson</span> <span style="color:#000000">person</span>){
<span style="color:#770088">return</span> <span style="color:#000000">Result</span>.<span style="color:#000000">ok</span>(<span style="color:#000000">personService</span>.<span style="color:#000000">updateCommunityPerson</span>(<span style="color:#000000">person</span>));
}
}</span></span>
第三节 Swagger 配置
<span style="background-color:#f8f8f8"><span style="color:#333333"><span style="color:#555555">@EnableSwagger2</span>
<span style="color:#770088">public</span> <span style="color:#770088">class</span> <span style="color:#0000ff">SwaggerConfig</span> {
<span style="color:#555555">@Bean</span>
<span style="color:#770088">public</span> <span style="color:#000000">Docket</span> <span style="color:#000000">api</span>() {
<span style="color:#aa5500">//Docket类就是Swagger提供的一个与Spring MVC集成的配置类</span>
<span style="color:#770088">return</span> <span style="color:#770088">new</span> <span style="color:#000000">Docket</span>(<span style="color:#000000">DocumentationType</span>.<span style="color:#000000">SWAGGER_2</span>) <span style="color:#aa5500">//文档类型设置为SWAGGER2</span>
.<span style="color:#000000">select</span>() <span style="color:#aa5500">//选择当前文档类型进行构建</span>
.<span style="color:#000000">apis</span>(<span style="color:#000000">RequestHandlerSelectors</span>.<span style="color:#000000">basePackage</span>(<span style="color:#aa1111">"com.qf.ssm.controller"</span>)) <span style="color:#aa5500">//请求控制器包</span>
.<span style="color:#000000">paths</span>(<span style="color:#000000">PathSelectors</span>.<span style="color:#000000">any</span>())<span style="color:#aa5500">//为任意请求构建API文档</span>
.<span style="color:#000000">build</span>() <span style="color:#aa5500">//构建API</span>
.<span style="color:#000000">apiInfo</span>(<span style="color:#000000">apiInfo</span>()); <span style="color:#aa5500">//设置AIP文档的信息</span>
}
<span style="color:#770088">private</span> <span style="color:#000000">ApiInfo</span> <span style="color:#000000">apiInfo</span>() {
<span style="color:#770088">return</span> <span style="color:#770088">new</span> <span style="color:#000000">ApiInfoBuilder</span>()
.<span style="color:#000000">title</span>(<span style="color:#aa1111">"物业管理项目接口文档"</span>)
.<span style="color:#000000">description</span>(<span style="color:#aa1111">"物业管理项目接口测试"</span>)
.<span style="color:#000000">version</span>(<span style="color:#aa1111">"1.0.0"</span>)
.<span style="color:#000000">termsOfServiceUrl</span>(<span style="color:#aa1111">""</span>) <span style="color:#aa5500">//服务条款地址</span>
.<span style="color:#000000">license</span>(<span style="color:#aa1111">""</span>) <span style="color:#aa5500">//许可证</span>
.<span style="color:#000000">licenseUrl</span>(<span style="color:#aa1111">""</span>) <span style="color:#aa5500">//许可证URL</span>
.<span style="color:#000000">build</span>();
}
}</span></span>
<span style="background-color:#f8f8f8"><span style="color:#333333"><span style="color:#117700"><</span><span style="color:#117700">bean</span> <span style="color:#0000cc">class</span>=<span style="color:#aa1111">"com.qf.ssm.config.SwaggerConfig"</span> <span style="color:#117700">/></span>
<span style="color:#aa5500"><!--静态资源放行--></span>
<span style="color:#117700"><</span><span style="color:#117700">mvc:resources</span> <span style="color:#0000cc">location</span>=<span style="color:#aa1111">"classpath:/META-INF/resources/"</span> <span style="color:#0000cc">mapping</span>=<span style="color:#aa1111">"swagger-ui.html"</span><span style="color:#117700">/></span>
<span style="color:#aa5500"><!--静态资源放行--></span>
<span style="color:#117700"><</span><span style="color:#117700">mvc:resources</span> <span style="color:#0000cc">location</span>=<span style="color:#aa1111">"classpath:/META-INF/resources/webjars/"</span> <span style="color:#0000cc">mapping</span>=<span style="color:#aa1111">"/webjars/**"</span><span style="color:#117700">/></span></span></span>
启动服务器,然后输入输入网址访问: http://localhost:10240/swagger-ui.html