1. Swagger介绍
OpenAPI规范(OpenAPI Specification 简称OAS)是Linux基金会的一个项目,试图通过定义一种用来描述API格式或API定义的语言,来规范RESTful服务开发过程,目前版本是V3.0,并且已经发布并开源在github上。https://github.com/OAI/OpenAPI-Specification
官网 : https://swagger.io/
2. Swagger常用注解
在Java类中添加Swagger的注解即可生成Swagger接口,常用Swagger注解如下:
- @Api:修饰整个类,描述Controller的作用
- @ApiOperation:描述一个类的一个方法,或者说一个接口
- @ApiParam:单个参数描述
- @ApiModel:用对象来接收参数
- @ApiModelProperty:用对象接收参数时,描述对象的一个字段
- @ApiResponse:HTTP响应其中1个描述
- @ApiResponses:HTTP响应整体描述
- @ApiIgnore:使用该注解忽略这个API
- @ApiError :发生错误返回的信息
- @ApiImplicitParam:一个请求参数
- @ApiImplicitParams:多个请求参数
@ApiImplicitParam属性:
属性 | 取值 | 作用 |
---|---|---|
paramType | 查询参数类型 | |
path | 以地址的形式提交数据 | |
query | 直接跟参数完成自动映射赋值 | |
body | 以流的形式提交 仅支持POST | |
header | 参数在request headers 里边提交 | |
form | 以form表单的形式提交 仅支持POST | |
dataType | 参数的数据类型 只作为标志说明,并没有实际验证 | |
Long | ||
String | ||
name | 接收参数名 | |
value | 接收参数的意义描述 | |
required | 参数是否必填 | |
true | ||
false | ||
defaultValue | 默认值 |
3. SpringBoot集成swagger
3.1 引入依赖
<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.2 application.yml
server:
port: 8088
swagger:
host: localhost:${server.port}
enable: true # 开启swagger
3.3 swagger配置文件
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
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.spi.DocumentationType;
import springfox.documentation.spring.web.plugins.Docket;
import springfox.documentation.swagger2.annotations.EnableSwagger2;
//
@Configuration
@EnableSwagger2 // 开启swagger注解支持
//@ConditionalOnProperty(prefix = "swagger", value = {"enable"}, havingValue = "true") // 是否开启swagger和application.yml中的swagger.enable属性对应
//@Profile({"dev","test"})
public class Swagger2Configuration {
@Value("${swagger.host}")
private String swaggerHost;
@Bean
public Docket createRestApi() {
return new Docket(DocumentationType.SWAGGER_2)
.apiInfo(apiInfo())
.host(swaggerHost)
.select()
// 要扫描的API(controller)基础包
.apis(RequestHandlerSelectors.basePackage("com.wyc"))
.paths(PathSelectors.any())
.build();
}
private ApiInfo apiInfo() {
return new ApiInfoBuilder()
.title("Swagger接口文档")
.description("Swagger接口文档")
// .termsOfServiceUrl("/")
.version("1.0")
.build();
}
}
3.4 Swagger接口定义
修改接口工程中页面查询接口,添加Swagger注解。
@Api(value = "swagger服务的controller", tags = "swagger",description = "swagger测试接口")
@RestController
@RequestMapping("/swagger")
public class SwaggerController {
@ApiOperation("swagger测试接口01")
@PostMapping("/swagger01")
public Result swaggerApi01(@RequestBody SwaggerDTO dto){
return Result.OK("测试成功");
}
@ApiOperation("swagger测试接口02")
@ApiImplicitParam(name = "参数",paramType = "body", dataType = "JSON",value = "{\n" +
" \"name\": \"姓名(String)\",\n" +
" \"address\": \"地址(String)\"\n" +
"}")
@PostMapping("/swagger02")
public Result swaggerApi02(@ApiIgnore @RequestBody SwaggerDTO dto){
return Result.OK(dto);
}
@ApiOperation("swagger测试接口03")
@GetMapping("/swagger03")
@ApiImplicitParam(name = "name", value = "姓名", required = true, dataType = "String")
public Result swaggerApi03(String name){
return Result.OK("传进来的参数为:" + name);
}
}
3.5 启动工程
启动服务工程,查看接口文档,请求:http://localhost:8088/swagger-ui.html