问题描述:
在书写分页查询的业务逻辑代码时,按照开发规范,先创建了相应的DTO,在Controller层中整体传参,程序正常运行,但打开knife4j进行调试时,发现参数挤在一块儿,既不美观,也造成了调试时的不便:
相关代码:
//DTO部分
@Data
@Schema(description = "管理员分页查询时传递的数据模型")
public class AdministratorPageQueryDTO implements Serializable {
@Schema(description = "姓名")
private String name;
@Schema(description = "页码")
private Integer pageNum;
@Schema(description = "当前页要展示的数据条数")
private Integer pageSize;
}
//控制层代码
@GetMapping("/page")
@Operation(summary = "管理员分页查询")
public Result<PageBean> pageQuery(AdministratorPageQueryDTO administratorPageQueryDTO){
log.info("管理员分页查询:{}", administratorPageQueryDTO);
PageBean pageBean = administratorService.pageQuery(administratorPageQueryDTO);
return Result.success(pageBean);
}
解决方案:
原因可能是knife4j版本的问题,当前我使用的是knife4j-openapi3,之前使用knife4j3.0.2时未出现此问题。
既然不是我们操作的原因,那么解决方案便从简考虑。因此我选择不传递DTO了,先传零散的数据,再在controller层方法内部封装成DTO,具体业务代码如下:
@GetMapping("/page")
@Operation(summary = "管理员分页查询")
public Result<PageBean> pageQuery(@RequestParam(required = false) String name,
@RequestParam(defaultValue = "1") Integer pageNum,
@RequestParam(defaultValue = "5") Integer pageSize){
AdministratorPageQueryDTO administratorPageQueryDTO = new AdministratorPageQueryDTO();
administratorPageQueryDTO.setName(name);
administratorPageQueryDTO.setPageNum(pageNum);
administratorPageQueryDTO.setPageSize(pageSize);
log.info("管理员分页查询:{}", administratorPageQueryDTO);
PageBean pageBean = administratorService.pageQuery(administratorPageQueryDTO);
return Result.success(pageBean);
}
运行调试,问题得到解决: