swagger在一定程度上给我们节省了很多重复繁琐的工作。在企业开发中,一般我们完成开发的交付给前端调用的时候,一般都要写接口调用文档说明。不要小看这个事情,很麻烦。尤其是有大量接口的时候,并且伴随着系统的不断升级需要调整接口的参数等等。那么,接口调用文档肯定也需要再次修改。这时候,丝袜哥就可以发挥他的优势了。

先来看一下丝袜哥长什么样子:

java SpringBoot如何调用接口下载文件到本地 springboot接口文档_spring boot


在spring boot中集成好的swagger启动以后就会长这个样子。

我们看一下如何来搭建这个swagger:

springboot集成swagger步骤:

  • 依赖导入
<!--  这是swagger的核心依赖 -->
    <dependency>
        <groupId>io.springfox</groupId>
        <artifactId>springfox-swagger2</artifactId>
        <version>2.9.2</version>
    </dependency>

    <!--  这是swaggerUI界面的依赖,可以在页面输入"http:localhost:8080/swagger-ui.html"查看
            接口的详细信息
    -->
    <dependency>
        <groupId>io.springfox</groupId>
        <artifactId>springfox-swagger-ui</artifactId>
        <version>2.9.2</version>
    </dependency>
  • 配置swagger组件
新建一个配置类,复制一下内容到新建的这个类中。(凡是双引号中的内容都可以改变)

    @EnableSwagger2
    @Configuration
    public class SwaggerConfig {
        @Bean
        public Docket creatRestApi(){
            return new Docket(DocumentationType.SWAGGER_2)
                    .pathMapping("/")
                    .select()
                    .apis(RequestHandlerSelectors.basePackage("com.em.bigdata.controller")) //生成Api要扫描的包
                    .paths(PathSelectors.any())
                    .build().apiInfo(new ApiInfoBuilder()
                            .title("大数据平台对接项目")
                            .description("接口详细信息")
                            .version("v1.0")
                            .contact(new Contact("bigdata","http://localhost:9999/","tuofafa@foxmail.com"))
                            .licenseUrl("http://localhost:9999/")
                            .build());

        }

    }

备注:这个就是swagger的一个配置类。只需要修改双引号里面的内容。使用的时候复制过去即可。

  • 各个类中配置如下:
    1.controller中配置如下:
@RestController
@Api(tags = "平台交易信息接口")   //swagger注解 表示这个类是哪个交易信息接口
public class BusinessController {
    @Autowired
    private ClientBusinessServiceImpl businessService;

    ResponseEntity entity = new ResponseEntity();

    /**
     * 商品销售额排行
     * @param count
     * @return
     */
    @RequestMapping(value = "/saleRank",method = RequestMethod.GET)
    @ApiOperation("查询商品销售数量")   //swagger注解  说明这个方法是做什么的
    @ApiImplicitParam(name = "count",value ="返回记录数",defaultValue = "null",required = true paramType = "int")   //swagger注解   给接口中的参数增加说明
    public ResponseEntity getCommoditySaleRank(Integer count) {
        if(StringUtils.isEmpty(count)){
            throw new ParamException("参数为空",2);
        }else {
            return entity.success(this.businessService.commoditySaleRank(count));
        }

    }
}

2.实体类、VO类中配置

/**
 * 交易大屏端
 * @author fafatuo
 * @version 1.0
 * @date 2020/8/20 9:50
 */
@ApiModel  //swagger注解   一般在实体类中配置,给实体类增加说明信息
public class BusinessEnd implements Serializable {

    @ApiModelProperty(value = "平台交易数据")   //swagger注解   一般用在属性上,增加属性的说明信息
    private Business platformBusiness;

    //今日新增订单数量
    @ApiModelProperty(value = "今日新增订单数量")
    private Integer toDayOrderNum;

    //今日新增订单金额
    @ApiModelProperty(value = "今日新增交易金额")
    private BigDecimal toDayOrderMoney;

    //累计交易额
    @ApiModelProperty(value = "累计交易额")
    private BigDecimal cumulativeTransactionAmount;

    public Business getPlatformBusiness() {
        return platformBusiness;
    }

    public void setPlatformBusiness(Business platformBusiness) {
        this.platformBusiness = platformBusiness;
    }

    public Integer getToDayOrderNum() {
        return toDayOrderNum;
    }

    public void setToDayOrderNum(Integer toDayOrderNum) {
        this.toDayOrderNum = toDayOrderNum;
    }

    public BigDecimal getToDayOrderMoney() {
        return toDayOrderMoney;
    }

    public void setToDayOrderMoney(BigDecimal toDayOrderMoney) {
        this.toDayOrderMoney = toDayOrderMoney;
    }

    public BigDecimal getCumulativeTransactionAmount() {
        return cumulativeTransactionAmount;
    }

    public void setCumulativeTransactionAmount(BigDecimal cumulativeTransactionAmount) {
        this.cumulativeTransactionAmount = cumulativeTransactionAmount;
    }

到这里,swagger配置就结束了。

赶紧启动起来访问测试一下:

访问地址:http:localhost:9999/swagger-ui.html

这个地址也是swagger官方提供的。我们只需要修改主机名和端口号就行。其他的都是固定写法。

测试一下:

java SpringBoot如何调用接口下载文件到本地 springboot接口文档_Business_02


没有任何问题。

swagger中常用注解的解释

@Api():表明这是一个swagger类资源。一般用在controller的类上。

参数:

tags: 表示说明,例如这是什么controller。有多个tags的时候,是一个list形式的({tags={“用户controller”}})

value: 也是表示说明性的东西。

@ApiOperation():用户方法,表示一个http请求的方法。

参数:

value: 用于对这个接口的描述

notes: 用于提示

tags: 用于重新分组

@ApiModel(): 用于在实体类上对实体类进行标注。

@ApiImplicitParam():用于对接口方法中的参数进行说明。

参数:

name: 表示传递的参数名,这里跟方法的参数名保持一致

value: 对这个参数字段的说明

defaultValue: 当没有传递值时,方法的默认值是什么

required: 这个参数是否是必须要传递的

@ApiImplicitParams():用于对接口方法中的参数化进行说明。(用在含有两个及以上的参数环境中)

参数和@ApiImplicitParam()参数一样。

例如:

@ApiOperation(“月累计交易额”)

@ApiImplicitParams({

@ApiImplicitParam(name = “year”,value = “输入年份:例如;2020”,defaultValue = “null”,required = true),

@ApiImplicitParam(name = “count”,value = “返回记录数”,defaultValue = “null”,required = false)

})

@ApiModelProperty: 用于方法,字段; 表示对model属性的说明或者数据操作更改

参数:

value: 字段说明

name: 重写属性名字

dataType: 重写属性类型

required: 是否必填

example: 举例说明

hidden: 隐藏

最后,建议大家在学习的时候,先整体看一遍。看完之后动手搭建一下。根据页面展示的效果在对应到swagger中每个类每个注解。这样,可能就理解每个注解以及每个注解中对应的参数到底有什么意义。