在openapi中自定义可分页显示



我正在进行一个spring-boot项目,将OPENAPI作为api文档的工具。

我试图用直观的输入(page-pageSize-sort(覆盖UI中可分页json对象的显示

   public OperationCustomizer parameterCustomizer() {
        return (Operation operation, HandlerMethod handlerMethod) -> {
            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())
                    .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.");
            if(operation.)
            operation.addParametersItem(page);
            operation.addParametersItem(size);
            operation.addParametersItem(sort);
            return operation;
        };
    }

这是有效的,但参数page、pageSize和sort已添加到所有方法中如何使它只适用于需要分页的方法?

找到它!如果参数类型中存在可分页类,我必须检查handlerMethod:

    public OperationCustomizer parameterCustomizer() {
        return (Operation operation, HandlerMethod handlerMethod) -> {
            if (Arrays.asList(handlerMethod.getMethod().getParameterTypes()).contains(Pageable.class)) {
                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())
                        .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;
        };
    }

最新更新