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

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

前言


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


场景说明一(两级嵌套)


   pageInfo中list显示数据

使用pageHelper插件分页查询时返回的分页信息为pageInfo,固定显示的内容如下:

35437128e03f4382c1254b067d95fbb8_d9da8cd7494b4c8eb8ad1bfecbeab0bc.png

所有的业务查询数据都会放到list中显示.现在有会员销课记录查询需求,要求按照分页进行查询.接口文档使用knife4j进行展示,使用pageHelper进行分页查询处理.最终返回的数据格式如下:

ab78c073289628c7b45c68b21670699d_1067771efed74b6bad65b68f2987d8c1.png

相关代码如下:

控制层代码:

@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;
  // 省略其他属性。。。。。。
    }


场景说明二(三级嵌套)


   现在需要查询售卡分页类表信息,同时要返回总数量以及总回款信息。相当于三级嵌套,实现效果如下:

9f9750615c54cd9fe0d8804bc6f07a54_782ecf4d7a8047a8a06c8509f8409aa8.png

相关代码:

控制层:

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;


场景说明三(四级嵌套)


先说一下实现效果,商品规格信息:

52ee7680741950830612481efdb31b21_212a994e30a14b5fa066a4e0d67288ca.png

控制层逻辑:

@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;


   注意如果实体类中的属性是集合,注意example和dataType可以不用设置.

   以上是处理多级嵌套部分数据不显示问题的处理方案,希望对有相同需求的同学有所帮助!


相关文章
|
JSON 前端开发 Java
Springboot中整合knife4j接口文档
Springboot中整合knife4j接口文档
1720 0
|
前端开发
若依框架---如何使用多数据源?前端table中如何显示图片?
若依框架---如何使用多数据源?前端table中如何显示图片?
1224 2
|
Java Spring
Spring Boot3整合knife4j(swagger3)
Spring Boot3整合knife4j(swagger3)
5000 1
|
前端开发
SpringBoot2.3.1集成Knife4j接口文档
SpringBoot2.3.1集成Knife4j接口文档
1362 44
|
JSON JavaScript 前端开发
springboot中使用knife4j访问接口文档的一系列问题
本文作者是一位自学前端两年半的大一学生,分享了在Spring Boot项目中使用Knife4j遇到的问题及解决方案,包括解决Swagger请求404错误、JS错误等,详细介绍了依赖升级、注解替换及配置修改的方法。
3137 1
|
前端开发
SpringBoot2.3.1集成Knife4j接口文档
SpringBoot2.3.1集成Knife4j接口文档
791 57
|
API Java 监控
SpringBoot基于OpenAPI3的接口文档管理快速集成和使用
本文主要简单介绍SpringCloud2023中进行接口文档管理,方便前后端开发和文档维护。文档管理工具基于开源的knife4j封装的openapi3。
2300 3
|
JSON 前端开发 Java
深入理解 Spring Boot 中日期时间格式化:@DateTimeFormat 与 @JsonFormat 完整实践
在 Spring Boot 开发中,处理前后端日期交互是一个常见问题。本文通过 **@DateTimeFormat** 和 **@JsonFormat** 两个注解,详细讲解了如何解析前端传来的日期字符串以及以指定格式返回日期数据。文章从实际案例出发,结合代码演示两者的使用场景与注意事项,解决解析失败、时区偏差等问题,并提供全局配置与局部注解的实践经验。帮助开发者高效应对日期时间格式化需求,提升开发效率。
4453 2
|
JSON JavaScript 前端开发
springboot中使用knife4j访问接口文档的一系列问题
本文介绍了在Spring Boot项目中使用Knife4j访问接口文档时遇到的一系列问题及其解决方案。作者首先介绍了自己是一名自学前端的大一学生,熟悉JavaScript和Vue,正在向全栈方向发展。接着详细说明了如何解决Swagger请求404错误,包括升级Knife4j依赖、替换Swagger 2注解为Swagger 3注解以及修改配置类中的代码。最后,针对报JS错误的问题,提供了删除消息转换器代码的解决方法。希望这些内容能对读者有所帮助。
3702 5
|
JavaScript 应用服务中间件 Linux
宝塔面板部署Vue项目、服务端Node___配置域名
本文介绍了如何使用宝塔面板在阿里云服务器上部署Vue项目和Node服务端项目,并配置域名。文章详细解释了安装宝塔面板、上传项目文件、使用pm2启动Node项目、Vue项目打包上传、以及通过Nginx配置域名和反向代理的步骤。
6480 2
宝塔面板部署Vue项目、服务端Node___配置域名

热门文章

最新文章