swagger2的使用详解

1、添加Swagger2依赖
<dependency>
    <groupId>io.springfox</groupId>
    <artifactId>springfox-swagger2</artifactId>
    <version>2.6.1</version>
</dependency>
<dependency>
    <groupId>io.springfox</groupId>
    <artifactId>springfox-swagger-ui</artifactId>
    <version>2.6.1</version>
</dependency>
2、创建Swagger2配置类

在XXXApplication.java同级目录创建类Swagger2,basePackage指定将生成文档的接口路径。

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
public class Swagger2 {
    @Bean
    public Docket createRestApi() {
        return new Docket(DocumentationType.SWAGGER_2)
                .apiInfo(apiInfo())
                .select()
                .apis(RequestHandlerSelectors.basePackage("com.xxx.springcloudproducer"))
                .paths(PathSelectors.any())
                .build();
    }
    private ApiInfo apiInfo() {
        return new ApiInfoBuilder()
                .title("springcloudproducer_RESTful APIs")
                .description("服务名:springcloudproducer")
                .version("1.0")
                .build();
    }
}
3、接口使用
@ApiOperation(value = "invoke", notes = "invoke测试")
@ApiImplicitParam(name = "param", value = "invoke入参", required = true, dataType = "String", paramType = "query")
@GetMapping(value = "/invoke")
public String invoke(String param) {
    System.out.println("This springCloudConsumerService 1:" + param);
    String result = param + "_consumer_" + System.currentTimeMillis();
    return result;
}

Note:
方法注释必须指定请求类型,否则swagger2将会生成该方法的各种请求类型的文档。

【=示例 start=】:

import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.List;

@RestController
@RequestMapping(value = "/api")
public class SpringCloudConsumerController {
    @Autowired
    private IQueryService queryService;

    @ApiOperation(value = "invoke", notes = "invoke测试")
    @ApiImplicitParam(name = "param", value = "invoke入参", required = true, dataType = "String", paramType = "query")
    @GetMapping(value = "/invoke")
    public String invoke(String param) {
        System.out.println("This springCloudConsumerService 1:" + param);
        String result = param + "_consumer_" + System.currentTimeMillis();
        return result;
    }
    
    @ApiOperation(value = "线程池环境测试跟踪ID", notes = "TraceThreadPoolExecutor测试跟踪ID")
    @ApiImplicitParam(name = "param", value = "入参", required = true, dataType = "String", paramType = "query")
    @PostMapping(value = "/testTrackID_C")
    public String testTrackID(@RequestParam(value = "param") String param) {
        String result = queryService.testTrackID(param);
        return result;
    }
}

【=示例 end=】

如果参数(返回值)是对象且需要@ApiModel,那么类(及基类)都需要加注解@ApiModel。否则接口A展示的Swagger对象信息可能是接口B的Swagger对象信息(猜测是swagger的bug)。

4、访问swagger管理页面

访问 http://localhost:port/swagger-ui.html,看到如下界面即表示成功。
填入相应参数,点击Try it out!即可进行接口测试。

5、Swagger使用的注解及其说明
作用范围API使用位置
对象属性@ApiModelProperty用在出入参数对象的字段上
协议集描述@Api用于controller类上
协议描述@ApiOperation用在controller的方法上
Response集@ApiResponses用在controller的方法上
Response@ApiResponse用在 @ApiResponses里边
非对象参数集@ApiImplicitParams用在controller的方法上
非对象参数描述@ApiImplicitParam用在@ApiImplicitParams的方法里边
描述返回对象的意义@ApiModel用在返回对象类上
@ApiImplicitParam
属性取值作用
paramType查询参数类型
path以地址的形式提交数据
query直接跟参数完成自动映射赋值
body以流的形式提交 仅支持POST
header参数在request headers 里边提交
form以form表单的形式提交 仅支持POST
dataType参数的数据类型 只作为标志说明,并没有实际验证
Long
String
name接收参数名
value接收参数的意义描述
required参数是否必填
true
false非必填
defaultValue默认值
6、异常处理

若swagger2页面空白,
相关依赖:

<java.version>1.8</java.version>
<spring-cloud.version>Edgware.SR1</spring-cloud.version>

<artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.10.RELEASE</version>

解决方案:
在Swagger2同级目录新建WebMvcConfig类,

import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;

@Configuration
public class WebMvcConfig extends WebMvcConfigurerAdapter {
    @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/");
    }
}

若页面依旧是空白,则修改springfox-swagger2、springfox-swagger-ui版本,此处均降级为2.6.1版本即可。

Swagger相关注解官方使用文档:
https://springfox.github.io/springfox/docs/current/#overriding-descriptions-via-properties
https://springfox.github.io/springfox/docs/current/#property-file-lookup

@Api:

不使用value,使用tags,和description,不公布TokenController
@Api(description = “接口描述”,tags = {“接口tags”})

@ApiModelProperty:
  • required = false:Swagger将展示成optional,optional表示可选。
  • allowableValues = “1,2,3”,:Swagger将展示 = [‘1’, ‘2’, ‘3’],表示枚举值;
  • readOnly = true:表示只读,Swagger将展示read only。、,具体功用待定;
  • hidden = true:表示隐藏该属性,Swagger将不展示该属性;
  • value = “差旅开放平台系统应用APPSecret”:表示字段描述;
  • position = 1:表示将字段排在第2位,默认按代码顺序排序;
  • example = "example:表示默认值,是Swagger生成Example Value时的默认值,方便Swagger测试使用,不是接口调用时的默认值。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值