在Swagger中,如何给暴露的接口及其参数添加说明描述?

您所在的位置:网站首页 1050tigpuz参数 在Swagger中,如何给暴露的接口及其参数添加说明描述?

在Swagger中,如何给暴露的接口及其参数添加说明描述?

2023-10-22 04:58| 来源: 网络整理| 查看: 265

Swagger是个测试工具,它能将我们在controller层暴露的接口添加说明。

给类和方法添加说明描述

一.我们可以使用@Api注解,在一个controller类上添加说明。 如下: 在这里插入图片描述 那么,访问swagger时,就能看到这个controller类的描述了 在这里插入图片描述 二.我们可以通过将@ApiOperation注解,写在controller层的方法上,来说明该方法的作用。 在这里插入图片描述 在这里插入图片描述

给实体类的字段添加描述。

我们可以给实体类的字段添加描述。 那么,我们为什么要给实体类的属性添加描述呢? 这是因为在开发中,我们的controller层经常用实体类作为出参和入参,添加了描述后,前端人员可以在swaggerUi中调试这个接口时,能够明白这个实体类中各个属性的作用。 在这里插入图片描述 使用方法就是把@ApiModelProperty注解定义在你要描述的属性名上面,通过注解的value属性来描述。 方法如下:

package com.wuyouhu.outboundWeb.domain; import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; import com.fasterxml.jackson.annotation.JsonIgnore; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import java.util.Date; @Data public class ForecastProject { @ApiModelProperty("id") @TableId(type = IdType.AUTO) private Long id; @ApiModelProperty(value = "任务名称") private String name;//任务名称 @ApiModelProperty(value = "对于该条外呼预测任务的一些备注说明") private String remarks;//对于该条外呼预测任务的一些备注说明。一般为空 @ApiModelProperty(value = "任务状态 0:停止 1:启动") private Integer state;//任务状态 0:停止 1:启动 @ApiModelProperty(value = "外显号码") private String explicitNumber;//外显号码 @ApiModelProperty(value = "接通率") private Integer answerRate;//接通率 @ApiModelProperty(value = "通话时长 单位为秒") private Long callDuration;//通话时长 单位为秒 @ApiModelProperty(value = "预测外号类型(固定0)") private Integer forecastType = 0;//预测外号类型(固定0)0: 根据空闲坐席,固定外呼,1:自动外呼(江苏系统没这个功能) @ApiModelProperty(value = "技能组id") private String skillGroupId;//技能组id @ApiModelProperty(value = "是否按键 0:挂断前用户无需按键 1:挂断前需用户按键") private Integer ivrFlowType;//是否按键 0:挂断前用户无需按键 1:挂断前需用户按键 @ApiModelProperty(value = "用户等待时的音乐(为空即可)") private String waitMusic;//用户等待时的音乐(为空即可) @ApiModelProperty(value = "按键内容") private String confirmTip;//按键内容,该内容会以电子音形式拨给客户 @ApiModelProperty(value = "组织架构id") private Long orgId;//组织架构id @ApiModelProperty(value = "预测外呼任务id'") private String fsProjectId;//fs接口返回的预测外呼任务id.fs接口返回来的对应字段名为'forecastProjectID' @ApiModelProperty(value = "任务是否逻辑删除。 0 - 否 1- 删除'") private Integer delFlag;//任务是否逻辑删除。 0 - 否 1- 删除 @ApiModelProperty(value = "话后整理时长 单位为秒") private Long afterCallDuration;//话后整理时长 单位为秒 @ApiModelProperty(value = "添加了这个预测外呼任务者的fsId") private Long userId;//添加了这个预测外呼任务者的fsId。 @ApiModelProperty(value = "任务创建时间") private Date createTime;//创建时间 @ApiModelProperty(value = "外显号码类型 0:固话 1:手机") private int explicitNumberType;//外显号码类型 0:固话 1:手机 @ApiModelProperty(value = "网络模式 0:内网 1:外网") private int networkMode;//网络模式 0:内网 1:外网 @ApiModelProperty(value = "无视") @TableField(exist = false) @JsonIgnore private Long userIdForSelect;//用于在dao层的表搜索时使用。不映射数据库表中的字段。 @ApiModelProperty(value = "用于表示项目Id(非预测外呼id),在获取预测外呼详情时,此参数为返回值之一") @TableField(exist = false) private String projectID;//项目Id,为sys_addUser_fs表查出来的'project_id'字段值. @ApiModelProperty(value = "无视") @TableField(exist = false) private String confirmCallBackUrl;//二次确认回调接口地址 } 给方法的入参添加描述

对于controller层方法中的参数,我们同样也可以添加描述。 使用到的注解为@ApiImplicitParams(), 在该注解里头,再以数组格式来声明多个@ApiImplicitParam注解,每声明一个代表要对一个参数进行描述。 @ApiImplicitParam注解的介绍如下:

@ApiImplicitParam对入参进行描述name对应要描述的参数名value参数的具体意义,作用。required参数是否必填。 -可省dataType参数的数据类型。paramType查询参数类型. -可省

值得注意的是,方法入参有时为普通参数,有时则是对象, 但都是通过@ApiImplicitParam注解来描述的,并且使用起来并无多大区别,下面就举例。

OR.参数为普通类型

参数是普通类型的情况下

@ApiOperation(value = "查询预测外呼任务列表") @ApiImplicitParams(value = { @ApiImplicitParam(name = "name",value = "预测外呼任务名",dataType = "String",required = false), @ApiImplicitParam(name = "skillGroupId",value = "技能组Id",dataType = "String",required = false), @ApiImplicitParam(name = "state",value = "任务状态 0:停止 1:启动",dataType = "Integer",required = false), @ApiImplicitParam(name = "ivrFlowYype",value = "是否按键 0:无需按键 1:需按键二次确认",dataType = "Integer",required = false) }) @GetMapping(value = "/list") public TableDataInfo getForecastTaskList(@RequestParam(value = "name",required = false) String name, @RequestParam(value = "skillGroupId",required = false) String skillGroupId, @RequestParam(value = "state",required = false) Integer state, @RequestParam(value = "ivrFlowYype",required = false) Integer ivrFlowYype){ startPage(); List forecastProjectList = forecastOutboundService.getForecastTaskList(name,skillGroupId,state,ivrFlowYype); return getDataTable(forecastProjectList); }

那么我们在swaggerUI就能看到对这些参数的描述了。 在这里插入图片描述

OR.参数是对象

在方法的入参参数是对象的情况下,我们进行一个假设; 假设这个对象有三个属性,分为name,age,sex,但我们的实际上只需要前端传来该对象的‘name’值和’age’值。 那么,此时我们通过@ApiImplicitParam注解中的’name’属性,来指定该对象的字属性名字即可。

@ApiOperation(value = "修改预测外呼参数") @ApiImplicitParams(value = { @ApiImplicitParam(name = "explicitNumber",value = "外显号码",dataType = "String",required = true), @ApiImplicitParam(name = "fsProjectId",value = "预测外呼任务id",dataType = "String",required = true), @ApiImplicitParam(name = "remarks",value = "对于该条外呼预测任务的一些备注说明",dataType = "String",required = false), @ApiImplicitParam(name = "answerRate",value = "接通率",dataType = "Integer",required = true), @ApiImplicitParam(name = "callDuration",value = "通话时长 单位为秒",dataType = "Long",required = true), @ApiImplicitParam(name = "afterCallDuration",value = "话后整理时长 单位为秒",dataType = "Long",required = true), @ApiImplicitParam(name = "skillGroupId",value = "技能组id",dataType = "String",required = true), @ApiImplicitParam(name = "ivrFlowType",value = "是否按键 0:挂断前用户无需按键 1:挂断前需用户按键,并对confirmTip参数定义内容",dataType = "Integer",required = true) }) @PatchMapping(value = "/update") public AjaxResult updateForecastOutbound(@RequestBody ForecastProject forecastProject){ return forecastOutboundService.updateForecastOutbound(forecastProject); }

效果如下,我们在swaggerUi中可以看到有几个加粗了的字段,这些就是我们通过@ApiImplicitParam的required(是否必填)属性指定为true的字段。 在这里插入图片描述

给方法返回值出参添加描述

对于返回值的参数描述,则需要使用@ApiResponses注解,再以数组形式,在该注解里头使用@ApiResponse注解来对返回值进行描述。 不过和入参描述不同的是,我们对返回值的描述是以一个实体类为描述参照的; 这是因为入参参数那样可以有一个或多个,但返回值就只有一个,不过返回值,也就是对象里头有多个字段。 基于此,我们需要先在用于当作返回值类型的实体类里头,通过@ApiModelProperty注解对实体类的属性值进行描述,可以参考给实体类的字段添加描述。 @ApiResponse的属性如下:

@ApiResponse对入参进行描述code响应状态码message该响应状态码所对应的消息response指定一个用于描述返回值类型,一般实体类。

代码如下:

@ApiResponses({ @ApiResponse(code = 200,message = "ok",response = ForecastProject.class) }) @GetMapping(value = "/list") public TableDataInfo getForecastTaskList(@RequestParam(value = "name",required = false) String name, @RequestParam(value = "skillGroupId",required = false) String skillGroupId, @RequestParam(value = "state",required = false) Integer state, @RequestParam(value = "ivrFlowYype",required = false) Integer ivrFlowYype){ startPage(); List forecastProjectList = forecastOutboundService.getForecastTaskList(name,skillGroupId,state,ivrFlowYype); return getDataTable(forecastProjectList); }

效果如下: 在这里插入图片描述

不知道你有注意到没,例子中,我指定的返回值类型虽然为’ForecastProject‘,但是方法中的返回值类型却是’TableDataInfo‘。 这是因为TableDataInfo是一个用于封装响应结果的对象,ForecastProject的数据其实被封装在了TableDataInfo类中的’rows’字段。 那我们为什么不把response属性指定为TableDataInfo类呢? 这就是工作协调中要灵活多变的地方,因为你把’TableDataInfo‘类当作要描述的返回值类型去给前端调试的话,是没有意义的! 前端开发人员当然知道需要操作TableDataInfo.rows来取得数据,但描述具体信息的实体类到底是什么结构,它却不知道,因此当然要将具体的实体类当作返回值类型去描述。

参考: https://www.freesion.com/article/1709510261/ https://www.cnblogs.com/h-c-g/p/11004020.html https://blog.csdn.net/jiangyu1013/article/details/83107255 https://blog.51cto.com/u_5634409/2343942 https://blog.csdn.net/qq_25983579/article/details/104532743



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3