766 Star 6.6K Fork 1.4K

GVP萧明 / knife4j

 / 详情

@ParameterObject无法读取到子类属性

待办的
创建于  
2024-05-09 22:21

版本信息

提供Knife4j、Spring Boot、Springfox、Springdoc-openapi等相关版本号信息
SpringBoot3.2.4+knife4j-4.5.0
阅读issue:#IZUCU:Knife4j 提ISSUES必看

...

重现步骤

在使用子类AdminOrderQueryDTO继承父类PageQuery的时候 打开接口文档只显示父类PageQuery的参数 而子类AdminOrderQueryDTO的参数不显示。
输入图片说明

但是在我使用子类HistoryOrderQueryDTO继承父类PageQuery时, 接口文档又是正常的。我也找不出是什么原因了
输入图片说明

提供所有作者能复现此问题的步骤,包括不局限:代码、贴图、错误日志、相关中间件版本等等

  • 父类PageQuery
@Data
@Schema(title = "分页查询对象", description = "分页查询对象")
public class PageQuery {

    @Schema(title = "页码",description = "页码-默认1")
    @Min(value = 1, message = "页码不能小于1")
    private Integer pageNo = 1;

    @Schema(title = "每页数量",description = "每页数量-默认5")
    @Min(value = 1, message = "每页数量不能小于1")
    private Integer pageSize = 5;

    @Schema(title = "排序字段",description = "排序字段-使用下划线命名规则")
    private String sortBy;

    @Schema(title = "是否升序",description = "是否升序- 默认true")
    private Boolean isAsc = true;

    public <T> Page<T> toMpPage(OrderItem... items) {
        //1.分页条件
        Page<T> page = new Page<>(pageNo, pageSize);

        //2.排序条件
        if (sortBy != null && sortBy.length() > 0) { //排序字段不为空
            page.addOrder(new OrderItem().setColumn(sortBy).setAsc(isAsc));
        } else if (items != null && items.length > 0) {
            page.addOrder(items);
        }

        return page;
    }
}
  • 子类AdminOrderQueryDTO

@EqualsAndHashCode(callSuper = true)
@ToString(callSuper = true)
@Accessors(chain = true)
@Data
@AllArgsConstructor
@NoArgsConstructor
@Schema(title = "订单查询对象", description = "订单查询对象")
public class AdminOrderQueryDTO extends PageQuery implements Serializable {
    @Schema(title = "店铺id")
    private Integer ShopId;
    @Schema(title = "订单状态", description = "1待付款 2待接单 3已接单 4派送中 5已完成 6已取消")
    @Range(min = 1, max = 6, message = "订单状态范围1-6")
    private Integer Status;
    @Schema(title = "订单号", description = "模糊匹配")
    private String Number;
    @Schema(title = "下单起始时间")
    private String BeginTime;
    @Schema(description = "下单结束时间")
    private String EndTime;
    @Schema(title = "支付状态", description = "0未支付 1已支付 2退款")
    @Range(min=0, max = 2, message = "支付状态范围0-2")
    private Integer PayStatus;
}
  • 子类AdminOrderQueryDTO对应的Controller
@RestController("adminOrderController")
@RequestMapping("/admin/order")
@Tag(name = "管理员订单相关接口")
@Slf4j
public class OrderController {
    @Autowired
    private IOrdersService ordersService;

    @GetMapping("/page")
    @Operation(summary = "订单列表查询")
    public AdminResult<PageResult<OrderVO>> pageQuery(@ParameterObject AdminOrderQueryDTO adminOrderQueryDTO) {
        return AdminResult.success(ordersService.adminPageQuery(adminOrderQueryDTO));
    }
}
  • 子类HistoryOrderQueryDTO
@EqualsAndHashCode(callSuper = true)
@Data
@AllArgsConstructor
@NoArgsConstructor
@Schema(title = "历史订单查询对象", description = "历史订单查询对象")
public class HistoryOrderQueryDTO extends PageQuery implements Serializable {
    @Schema(description = "订单号,模糊匹配")
    private String number;

    @Schema(description = "下单起始时间,yyyy-MM-dd")
    @DateTimeFormat(pattern = "yyyy-MM-dd")
    private LocalDate beginTime;

    @Schema(description = "下单结束时间,yyyy-MM-dd")
    @DateTimeFormat(pattern = "yyyy-MM-dd")
    private LocalDate endTime;

    @Schema(description = "订单状态 1待付款 2待接单 3已接单 4派送中 5已完成 6已取消")
    @Range(min = 1, max = 6, message = "订单状态范围1-6")
    Integer status;

    @Schema(description = "支付状态 0未支付 1已支付 2退款")
    @Range(min = 0, max = 2, message = "支付状态范围0-2")
    private Integer payStatus;

    @Schema(description = "店铺id")
    private Integer shopId;

    @Override
    public String toString() {
        return "HistoryOrderQueryDTO{" +
                "number='" + number + '\'' +
                ", beginTime=" + beginTime +
                ", endTime=" + endTime +
                ", status=" + status +
                ", payStatus=" + payStatus +
                ", shopId=" + shopId +
                "," +
                super.toString() +
                '}';
    }

}
  • 子类HistoryOrderQueryDTO 对应的controller
@RestController("userOrderController")
@RequestMapping("/user/order")
@Tag(name = "用户订单相关接口")
@Slf4j
public class OrderController {
    @GetMapping("/page")
    @Operation(summary = "历史订单查询")
    public Result<PageResult<OrderVO>> page(@ParameterObject HistoryOrderQueryDTO historyOrderQueryDTO) {
        log.info("分页查询历史订单,参数为:{}", historyOrderQueryDTO);
        PageResult<OrderVO> result = ordersService.pageQuery(historyOrderQueryDTO);
        return Result.success(result);
    }
}

...

其他

...

评论 (0)

Preke_Li 创建了任务
Preke_Li 修改了标题
Preke_Li 修改了描述
Preke_Li 修改了描述
展开全部操作日志

登录 后才可以发表评论

状态
负责人
里程碑
Pull Requests
关联的 Pull Requests 被合并后可能会关闭此 issue
分支
开始日期   -   截止日期
-
置顶选项
优先级
参与者(1)
Java
1
https://gitee.com/xiaoym/knife4j.git
git@gitee.com:xiaoym/knife4j.git
xiaoym
knife4j
knife4j

搜索帮助