文章目录
1. 前言
大家或许有这样的感受,前端经常抱怨后端给的接口文档与实际情况不一致。后端又觉得编写及维护接口文档会耗费不少精力,经常来不及更新。其实无论是前端调用后端,还是后端调用后端,都期望有一个好的接口文档。
但是这个接口文档对于程序员来说,就跟代码注释一样,经常会抱怨别人写的代码没有写注释,然而自己写起代码起来,最讨厌的,也是写注释。所以仅仅只通过强制来规范大家是不够的,随着时间推移,版本迭代,接口文档往往很容易就跟不上代码了。
所以,Swagger
就是用来解决这一问题的工具。开发人员不用再提供文档,只需要给出一个Swagger 地址,就可以让需要调用到接口的人员在线获取数据,测试接口功能,可以说是非常便利了。
2. maven文件增加对Swagger2依赖
<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>
3. 新建支持Swagger2的配置类
使用 Swagger2 需要进行配置,Spring Boot 中对 Swagger2 的配置非常方便,新建一个配置类,Swagger2 的配置类上除了添加必要的 @Configuration
注解外,还需要添加 @EnableSwagger2
注解。
package com.ieslab.powergrid.demosvr.config;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import springfox.documentation.builders.ApiInfoBuilder;
import springfox.documentation.builders.PathSelectors;
import springfox.documentation.builders.RequestHandlerSelectors;
import springfox.documentation.service.ApiInfo;
import springfox.documentation.service.Contact;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spring.web.plugins.Docket;
import springfox.documentation.swagger2.annotations.EnableSwagger2;
/** <p>Title: SwaggerConfig </p>
* <p>Description: Swagger配置类</p>
*
* @author binge
* @date 2020-2-20 下午7:15:30
* @version V1.0
*/
@Configuration
@EnableSwagger2
public class SwaggerConfig {
@Bean
public Docket creatApi() {
return new Docket(DocumentationType.SWAGGER_2)
.apiInfo(apiInfo()) // 指定构建api文档的详细信息的方法,下面会有实现:apiInfo()
.select()
// 指定要生成api接口的包路径,这里把controller作为包路径,生成controller中的所有接口
.apis(RequestHandlerSelectors.basePackage("com.ieslab.powergrid.demosvr.controller"))
.paths(PathSelectors.any())
.build();
}
private ApiInfo apiInfo() {
return new ApiInfoBuilder()
.title("Spring Boot集成Swagger2接口测试")
.description("生成的接口如下")
.version("1.0")
.contact(new Contact("斌哥","https://blog.csdn.net/houpeibin2012","houpeibin@126.com"))
.build();
}
}
代码中已经注释很清楚了,请仔细阅读!!!
现在我们可以测试一下配置有没有生效,启动项目,在浏览器中输入 http://localhost:8080/swagger-ui.html
,即可看到 swagger2 的接口页面,如下图所示:
结合该图,对照上面的 Swagger2 配置文件中的配置,可以很明确的知道配置类中每个方法的作用。这样就很容易理解和掌握 Swagger2 中的配置了,也可以看出,其实 Swagger2 配置很简单。
4. Swagger2使用方法
4.1 注解总体说明:
@Api:用在请求的类上,表示对类的说明
tags="说明该类的作用,可以在UI界面上看到的注解"
value="该参数没什么意义,在UI界面上也看不到,所以不需要配置"
@ApiOperation:用在请求的方法上,说明方法的用途、作用
value="说明方法的用途、作用"
notes="方法的备注说明"
@ApiImplicitParams:用在请求的方法上,表示一组参数说明
@ApiImplicitParam:用在@ApiImplicitParams注解中,指定一个请求参数的各个方面
name:参数名
value:参数的汉字说明、解释
required:参数是否必须传
paramType:参数放在哪个地方
· header --> 请求参数的获取:@RequestHeader
· query --> 请求参数的获取:@RequestParam
· path(用于restful接口)--> 请求参数的获取:@PathVariable
· body(不常用)
· form(不常用)
dataType:参数类型,默认String,其它值dataType="Integer"
defaultValue:参数的默认值
@ApiResponses:用在请求的方法上,表示一组响应
@ApiResponse:用在@ApiResponses中,一般用于表达一个错误的响应信息
code:数字,例如400
message:信息,例如"请求参数没填好"
response:抛出异常的类
@ApiModel:用于响应类上,表示一个返回响应数据的信息
(这种一般用在post创建的时候,使用@RequestBody这样的场景,
请求参数无法使用@ApiImplicitParam注解进行描述的时候)
@ApiModelProperty:用在属性上,描述响应类的属性
4.2 用在请求的类上,说明该类的说明
@Api(tags="RequestParam用法测试接口类")
http://localhost:8080/swagger-ui.html
可以看到如下效果:
4.3 用在请求的方法上,说明方法的作用
@RequestMapping("/test1")
@ResponseBody
@ApiOperation(value="测试接口1",notes="url参数中的name必须要和@RequestParam(\"name\")一致," +
"因为请求参数绑定到你控制器的方法参数,所以方法参数可以自定义")
public String test1(@RequestParam("name")String name1){
System.out.println(name1);
return name1;
}
效果:
4.4 用在请求的方法上,包含一组参数说明
@ApiImplicitParams:用在请求的方法上,包含一组参数说明
@ApiImplicitParam:用在 @ApiImplicitParams 注解中,指定一个请求参数的配置信息
name:参数名
value:参数的汉字说明、解释
required:参数是否必须传
paramType:参数放在哪个地方
· header --> 请求参数的获取:@RequestHeader
· query --> 请求参数的获取:@RequestParam
· path(用于restful接口)--> 请求参数的获取:@PathVariable
· body(不常用)
· form(不常用)
dataType:参数类型,默认String,其它值dataType="Integer"
defaultValue:参数的默认值
实例代码:
@RequestMapping("/test4")
@ResponseBody
@ApiImplicitParams({
@ApiImplicitParam(name="name",value="姓名",required=true,paramType="form"),
@ApiImplicitParam(name="password",value="密码",required=true,paramType="form"),
@ApiImplicitParam(name="mobile",value="手机号",required=true,paramType="form"),
@ApiImplicitParam(name="age",value="年龄",required=true,paramType="form",dataType="Integer")
})
public String test4(String name, String password, String mobile, String age){
return name;
}
效果:
4.5 用于请求的方法上,表示一组响应
@ApiResponses:用于请求的方法上,表示一组响应
@ApiResponse:用在@ApiResponses中,一般用于表达一个错误的响应信息
code:数字,例如400
message:信息,例如"请求参数没填好"
response:抛出异常的类
效果:
4.6 用于实体类上,表示一个返回响应数据的信息
注解在实体类:
@ApiModel:用于响应类上,表示一个返回响应数据的信息
(这种一般用在post创建的时候,使用@RequestBody这样的场景,
请求参数无法使用@ApiImplicitParam注解进行描述的时候)
@ApiModelProperty:用在属性上,描述响应类的属性
@ApiModel(description= "人类")
public class Person {
@ApiModelProperty(value = "用户编号")
int id;
@ApiModelProperty(value = "名字")
String lastName;
@ApiModelProperty(value = "姓")
String firstName;
@ApiModelProperty(value = "地址")
String address ;
@ApiModelProperty(value = "城市")
String city;
}
5. 总结
本节课详细分析了 Swagger2 的优点,以及 Spring Boot 如何集成 Swagger2,包括配置,使用方法,同时也提供了实例及效果图,方便大家理解。我相信,大家也感受到了 Swagger 的强大之处。目前,Swagger2是每个项目组中必备的工具之一,希望大家能够应用到项目中,提升开发效率,同时,也标准化自己的接口,让编程更加简单、规范。