You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spring Boot中OpenApi自定义分页参数仅对含Pageable方法生效的实现

解决方案

要实现仅对包含Pageable参数的接口添加分页参数,你可以通过HandlerMethod检查目标方法的参数列表,判断是否存在org.springframework.data.domain.Pageable类型的参数,再决定是否添加分页参数。同时建议移除自动生成的pageable参数,避免UI中出现重复内容。

修改后的代码如下:

public OperationCustomizer parameterCustomizer() {
    return (Operation operation, HandlerMethod handlerMethod) -> {
        // 检查方法参数是否包含Pageable类型
        boolean hasPageableParameter = Arrays.stream(handlerMethod.getMethodParameters())
                .anyMatch(param -> param.getParameterType().equals(org.springframework.data.domain.Pageable.class));

        if (hasPageableParameter) {
            // 移除自动生成的pageable参数(避免重复展示)
            operation.getParameters().removeIf(param -> "pageable".equals(param.getName()));

            // 构建分页参数
            Parameter page = new Parameter()
                    .in(ParameterIn.QUERY.toString())
                    .schema(new IntegerSchema()._default(0))
                    .name("page")
                    .description("La page (0..N)")
                    .required(true);
            Parameter size = new Parameter()
                    .in(ParameterIn.QUERY.toString())
                    .schema(new IntegerSchema()._default(10))
                    .name("pageSize")
                    .description("Nombre de résultats par page")
                    .required(true);
            Parameter sort = new Parameter()
                    .in(ParameterIn.QUERY.toString())
                    .schema(new ArraySchema().items(new StringSchema()))
                    .name("sort")
                    .description("Critère de tri avec le format: property(,asc|desc). "
                            + "Tri par défaut: ascendant. "
                            + "Multiple critères de tri sont supportés.");

            // 添加分页参数
            operation.addParametersItem(page);
            operation.addParametersItem(size);
            operation.addParametersItem(sort);
        }
        return operation;
    };
}

关键说明:

  • 检查Pageable参数:通过handlerMethod.getMethodParameters()获取方法的所有参数,遍历判断是否有Pageable类型的参数,只有存在时才执行后续逻辑。
  • 移除默认pageable参数:OpenAPI会自动为Pageable参数生成一个名为pageable的复合参数,需要先移除它,避免UI中同时显示原始复合参数和拆分后的分页参数。
  • 完善sort参数的Schema:原代码中sort的ArraySchema没有指定元素类型,这里补充items(new StringSchema()),让UI能正确识别参数格式。

内容的提问来源于stack exchange,提问作者gat kipper

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.25 17:01:37