knife4j中响应参数实现嵌套展示

前言

    后端接口现在使用的是knife4j,会遇到返回参数中嵌套显示的需求,但是会出现参数显示不全的问题,处理的办法是响应参数使用泛型处理,下面结合具体的场景说一下如何处理不显示问题.

场景说明一(两级嵌套)

    pageInfo中list显示数据
使用pageHelper插件分页查询时返回的分页信息为pageInfo,固定显示的内容如下:
在这里插入图片描述
所有的业务查询数据都会放到list中显示.现在有会员销课记录查询需求,要求按照分页进行查询.接口文档使用knife4j进行展示,使用pageHelper进行分页查询处理.最终返回的数据格式如下:
在这里插入图片描述
相关代码如下:
控制层代码:


    @ApiOperation("销课记录列表查询")
    public ResultVo<PageInfo<SignCourseRecord>> findSignCourseRecordList(SignCourseQueryDto signCourseQueryDto)  {
        PageInfo<SignCourseRecord> signCourseRecordList = financeService.findSignCourseRecordList(signCourseQueryDto);
        return ResultVoUtil.success(signCourseRecordList);
    }

响应参数:

@ApiModel("签到记录信息")
@Data
public class SignCourseRecord  {

    private Long courseRecordId;

    private String staffName;
    
  // 省略其他属性。。。。。。
    }

场景说明二(三级嵌套)

    现在需要查询售卡分页类表信息,同时要返回总数量以及总回款信息。相当于三级嵌套,实现效果如下:
在这里插入图片描述
相关代码:
控制层:

public ResultVo<SaleCardInfoVo<PageInfo<SaleStaffCardVo>>> findSaleStaffCardVos(SaleCardDto saleCardDto)  {
        SaleCardInfoVo   saleStaffCardVos = financeService.findSaleStaffCardVos(saleCardDto);
        return ResultVoUtil.success(saleStaffCardVos);
    }

响应实体类:

@ApiModel("售卡统计信息")
public class SaleCardInfoVo<SaleStaffCardVo> implements Serializable {
    private static final long serialVersionUID = -6767885414660070855L;

 
    @ApiModelProperty(value = "总售卡数",example = "3",dataType = "long")
    private long totalCount;

  
    @ApiModelProperty(value = "回款总金额",example = "25.56",dataType = "BigDecimal")
    private BigDecimal totalIncomePrice=BigDecimal.ZERO;

   
    @ApiModelProperty(value = "未总收款金额",example = "25.56",dataType = "BigDecimal")
    private BigDecimal totalUnIncomePrice;

  
    @ApiModelProperty(value = "总应收金额",example = "25.56",dataType = "BigDecimal",hidden = true)
    private BigDecimal totalRealPrice=BigDecimal.ZERO;

    @ApiModelProperty(value = "售卡分页数据")
    private PageInfo<com.kawaxiaoyu.manage.management.api.brandFinance.vo.SaleStaffCardVo> saleStaffCardVos;}
    // 省略get/set
@ApiModel(value = "售卡统计信息")
public class SaleStaffCardVo implements Serializable {
    private static final long serialVersionUID = -2298163108908959992L;


    @ApiModelProperty(value = "会员卡卡号",example = "2522",dataType = "String")
    private String cardNo;

    @ApiModelProperty(value = "会员姓名",example = "小白",dataType = "String")
    private String staffName;

 // 省略相关属性

封装统一响应信息:

@Data
@Builder
@Accessors(chain = true)
@ApiModel("响应参数")
public class ResultVo<T> implements Serializable {

    private static final long serialVersionUID = -8054007511410819665L;

    @ApiModelProperty(value = "响应状态码",example = "1",dataType = "Integer")
    private int code;

    // 是否成功标识.true表示成功,false表示失败
    @ApiModelProperty("success标识,true表示成功,false表示失败")
    private boolean success;

    // 操作成功时需要响应给客户端的响应数据
    @ApiModelProperty("响应信息")
    private String msg;

    
    @ApiModelProperty("响应数据")
    private T data;

    @ApiModelProperty("当前时间")
    @JSONField(format = "yyyy-MM-dd HH:mm:ss")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8")
    private Date time;

场景说明三(四级嵌套)

    先说一下实现效果,商品规格信息:
在这里插入图片描述
控制层逻辑:

@ApiOperation(value = "商品规格信息查询",notes = "加入购物车以及立即购买时使用")
    @PostMapping("/findGoodsSpecList")
    public ApiResult<GoodsSpecInfo> findGoodSpecList(@RequestBody GoodSelectSpecReqParam goodsSelectSpecReqParam) throws Exception{
        GoodSpecInfo goodSpecInfo = goodsService.findGoodSpecList(goodSelectSpecReqParam);
        return ApiResult.ok(goodsSpecInfo);
    }

响应实体类(二级):

@ApiModel("商品规格信息")
@Data
@ToString
public class GoodsSpecInfo {
    // 默认规格商品信息
    @ApiModelProperty(value = "默认规格信息",dataType = "DefaultGoodsInfoVo.class")
    private DefaultGoodsInfoVo defaultGoodsInfoVo;

    // 商品规格列表信息
    @ApiModelProperty(value = "规格列表",dataType = "List.class")
    private List<GoodsSpecVo> goodsSpecVoList;
	
}

响应实体类(三级):

@ApiModel("商品规格列表实体类")
@Data
@ToString
public class GoodsSpecVo {

    @ApiModelProperty(value = "规格id",example = "1",dataType = "Integer")
    private Integer specKeyId;

    @ApiModelProperty(value = "规格名",example = "1",dataType = "String")
    private String specKeyName;

    @ApiModelProperty(value = "规格项集合信息")
    private List<GoodsSpecValueVo> goodsSpecValueVoList;

}

响应实体类(四级):

@ApiModel("商品规格")
@Data
@ToString
public class GoodsSpecValueVo {

    @ApiModelProperty(value = "规格项id",example = "1",dataType = "Integer")
    private Integer specValueId;

    @ApiModelProperty(value = "规格项名id",example = "1",dataType = "String")
    private String specValueName;

    // 新增是否显示规格 1-显示 2-不显示
    @ApiModelProperty(value = "是否显示规格 1-显示 2-不显示",example = "1",dataType = "Integer")
    private Integer isShow=1;

}

    注意如果实体类中的属性是集合,注意exampledataType可以不用设置.
    以上是处理多级嵌套部分数据不显示问题的处理方案,希望对有相同需求的同学有所帮助!
    参考链接:官方接口文档:https://doc.xiaominfo.com

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

卖柴火的小伙子

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值