Swagger 使用

907 阅读3分钟

SprintBoot 集成

Swagger 是一个规范和完整的框架,用于生成、描述、调用和可视化 RESTful 风格的 Web 服务。总体目标是使客户端和文件系统作为服务器以同样的速度来更新。文件的方法,参数和模型紧密集成到服务器端的代码,允许API来始终保持同步。

  • 接口的文档在线自动生成。

  • 功能测试。

  1. pom 引入
<dependency>
    <groupId>io.springfox</groupId>
    <artifactId>springfox-swagger-ui</artifactId>
    <version>2.9.2</version>
</dependency>
<dependency>
	<groupId>io.springfox</groupId>
	<artifactId>springfox-swagger2</artifactId>
	<version>2.9.2</version>
</dependency>
  1. 添加配置类 SwaggerConfig
@Configuration
@EnableSwagger2
public class SwaggerConfig implements WebMvcConfigurer {

    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        registry.addResourceHandler("swagger-ui.html").addResourceLocations("classpath:/META-INF/resources/");
        registry.addResourceHandler("/webjars/**").addResourceLocations("classpath:/META-INF/resources/webjars/");
        registry.addResourceHandler("/swagger/**").addResourceLocations("classpath:/static/swagger/");
    }

    @Bean
    public Docket createRestApi() {
        return new Docket(DocumentationType.SWAGGER_2)
                .apiInfo(apiInfo())
                .select()
                //加了ApiOperation注解的方法,生成接口文档
                .apis(RequestHandlerSelectors.withMethodAnnotation(ApiOperation.class))
                //包下的类,生成接口文档
                //.apis(RequestHandlerSelectors.basePackage("io.seu.modules.job.controller"))
                .paths(PathSelectors.any())
                .build();
    }

    private ApiInfo apiInfo() {
        return new ApiInfoBuilder()
                .title("校管家管理系统")
                .description("校管家-api文档")
                .termsOfServiceUrl("https://localhost:8080/")
                .version("1.0.1")
                .build();
    }

}

常用注解

swagger通过注解表明该接口会生成文档,包括接口名、请求方法、参数、返回信息的等等。

  • @ApiParam:单个参数描述
  • @ApiModel:用对象来接收参数
  • @ApiProperty:用对象接收参数时,描述对象的一个字段
  • @ApiResponse:HTTP响应其中1个描述
  • @ApiResponses:HTTP响应整体描述
  • @ApiIgnore:使用该注解忽略这个API
  • @ApiError :发生错误返回的信息
  • @ApiImplicitParam:一个请求参数
  • @ApiImplicitParams:多个请求参数

@Api:用在类上,描述Controller的作用

@Api:用在请求的类上,表示对类的说明
    tags="API分组标签。具有相同标签的API将会被归并在一组内展示。"
    value="如果tags没有定义,value将作为Api的tags使用"
    description="描述"
    
@Api(tags = {"TagController","Tag"},description = "标签控制器")

@ApiOperation:用在方法上,或者说接口

@ApiOperation:用在请求的方法上,说明方法的用途、作用
    value="简单说明,展示在接口列表"
    notes="详细说明,展示在接口的详情页"
    tags="接口的标签,相同标签的接口会在一个标签页下展示"
    httpMethod="HTTP请求的动作名,可选值有:"GET", "HEAD", "POST", "PUT", "DELETE", "OPTIONS" and "PATCH""
    code="默认值200"

@ApiOperation(value = "热门标签",notes = "所有热门标签",tags = "Tag",httpMethod = "GET",response = R.class)

@ApiImplicitParams 和 @ApiImplicitParam 用在方法上

@ApiImplicitParams:
    @ApiImplicitParam的容器,可包含多个@ApiImplicitParam注解

@ApiImplicitParam,请求参数属性配置:
    name:参数名称
    value:参数说明
    required:是否必须
    dataType:参数类型,默认String
    defaultValue:参数的默认值
    paramType:参数放在哪个地方
        · header --> 请求参数的获取:@RequestHeader
        · query --> 请求参数的获取:@RequestParam
        · path(用于restful接口)--> 请求参数的获取:@PathVariable
        · body(不常用)
        · form(不常用) 

@ApiParam 用在参数上

@ApiResponses 和 @ApiResponse 用在方法上,表示响应

@ApiResponses
    @ApiResponse容器,可以包含多个@ApiResponse注解

@ApiResponse,返回结果属性配置:
        code:返回结果的编码。
        message:返回结果的说明。
        response:返回结果对应的类。
   

@ApiModel 用在实体类上 @ApiModelProperty 用在类属性上

@ApiModel是对整个类的属性的配置:
    value:类的说明
    description:详细描述
    
@ApiModelProperty是对具体每个字段的属性配置:
    name:字段名称
    value:字段的说明
    required:是否必须
    example:示例值
    hidden:是否显示