Swagger

第一节 Swagger 简介

1. 企业开发所面临的问题

在前后端分离开发的情况下,前端开发人员经常抱怨后端开发人员给的接口文档与实际情况不一致。后端开发人员觉得编写接口文档太过于消耗精力,而且更新也不及时,以至于前后端开发人员经常出现争吵的情况,为了解决这个问题,Swagger应运而生。

2. Swagger 简介

Swagger 是一个规范且完整的框架,用于生成、描述、调用和可视化 RESTful 风格的 Web 服务。Swagger 的目标是对 REST API 定义一个标准且和语言无关的接口,可以让人和计算机拥有无须访问源码、文档或网络流量监测就可以发现和理解服务的能力。当通过 Swagger 进行正确定义,用户可以理解远程服务并使用最少实现逻辑与远程服务进行交互。与为底层编程所实现的接口类似,Swagger 消除了调用服务时可能会有的猜测。

3. Swagger 的优势

  • 支持 API 自动生成同步的在线文档

    使用 Swagger 后可以直接通过代码生成文档,不再需要自己手动编写接口文档了,对程序员来说非常方便,可以节约写文档的时间去学习新技术。

  • 提供 Web 页面在线测试 API

    光有文档还不够,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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值