当前位置: 首页 > 知识库问答 >
问题:

在springdocs中,我可以基于操作上的标记定义多个OpenAPI定义吗

子车高超
2023-03-14

我需要在一个应用程序中为同一个API使用springdocs定义两个不同的OpenApi定义:一个用于内部开发人员,一个用于外部开发人员。外部定义将包括内部定义中的一些操作,但不是所有操作。

我已经考虑过使用GroupedOpenApi创建这两个定义,但这需要我将应该从外部定义中排除的endpoint移动到单独的RestController中,并移动到排除的包中,该包不会包含在外部开发人员的定义中,但仍将包含在内部定义中。我更喜欢基于API定义而不是基于endpoint的安全访问来构造代码。

这似乎可以使用SecurityScheme或标记来定义在给定定义中包含哪些操作,例如使用GroupedOpenApi以及要包含的路径/包。因此,例如,我可以使用以下内容定义外部API的定义:

GroupedOpenApi.builder()
            .group("externalGroupName")
            .securitySchemesToInclude("externalSchemeName") // this doesn't currently exist
            .build();

然后,使用该SecurityScheme标记为SecurityRequest的任何操作都将添加到此外部定义中。例如,我可以在同一个RestController中定义以下两个endpoint:

将包括:

java prettyprint-override">    @SecurityRequirement(name = "externalSchemeName")
    @GET
    @Path("/pets")
    public Response getResponse(){
        return null;
    }
}

将不包括:

    @SecurityRequirement(name = "internalSchemeName")
    @GET
    @Path("/pets/internal")
    public Response getInternalResponse(){
        return null;
    }
}

使用这种方法,最好提供与路径/包包含/排除类似的包含/排除安全方案。

这似乎目前需要对springdocs做出贡献,除非我误解了如何创建多个定义的选项。有没有另一种方法可以实现从我定义的一个定义中排除一个操作,而不完全隐藏该操作,也不重组我的包?

请注意,如果可能的话,我也不愿意维护配置中应该从组中排除的所有路径的列表,因为这很容易出错,并且不允许跨多个服务提供共享配置。我更喜欢一个注释驱动的方法,类似于其他swagger定制的方式,这样我就定义了一次配置,然后根据注释更新每个资源,以驱动生成的swagger。

共有1个答案

公孙栋
2023-03-14

使用你的例子,你有其他过滤器(基于路径)的GroupeOpenApi,你没有使用:

    GroupedOpenApi.builder()
            .group("internalGroupName")
            .pathsToMatch("/pets/internal")
            .build();

    GroupedOpenApi.builder()
            .group("externalGroupName")
            .pathsToMatch("/pets")
            .packagesToExclude("/pets/internal")
            .build();
 类似资料:
  • 问题内容: 我正在使用声明性Jenkins管道来运行我的一些构建管道,并且想知道是否可以定义多个代理标签。 我有许多构建代理与我的Jenkins挂钩,并且希望此特定管道能够由具有不同标签的各种代理(但不能由ALL代理)构建。 更具体地说,假设我有2个代理,标签为“小”,4个为标签“中”,有6个为标签“大”。现在,我有一个非常节省资源的管道,我希望仅在“小型”或“中型”代理上执行,而不在大型代理上执

  • 定义和使用自定义标记可以吗?(这不会与将来的html标记冲突)-通过更改outerHTML替换/呈现这些标记?? 我在下面创建了一个演示,看起来效果不错 问题的最新情况: 让我进一步解释一下。请假设浏览器上启用了JavaScript-也就是说,应用程序不应该在没有javascript的情况下运行。 我见过使用自定义属性在指定标记中定义自定义行为的库。例如,角度。js大量使用自定义属性。(它还有关于

  • 问题内容: 我在某些类上定义了几个CONST,并希望获得它们的列表。例如: 有什么方法可以获取在类中定义的CONST的列表吗?据我所知,最接近的option()无法解决问题。 我真正需要的是常量名称列表-像这样: 要么: 甚至: 问题答案: 您可以为此使用反射。请注意,如果您经常这样做,则可能需要查看缓存结果。 输出:

  • 我正在做一个spring boot项目,使用OPENAPI作为api文档的工具。 我试图用直观的输入(page-pageSize-sort)覆盖UI中可分页json对象的显示 这是可行的,但是参数页面、页面大小和排序被添加到所有方法中。我如何才能使这只适用于需要可分页的方法?

  • TensorFlow GraphDef based models (typically created via the Python API) may be saved in one of following formats: TensorFlow SavedModel Frozen Model Session Bundle Tensorflow Hub module All of above f

  • 我正在用Java编写一个REST服务(在Tomcat 9上使用JAX-RS标准),我想向我的程序添加日志,以便在调用时跟踪他的工作。 因此,我使用Log4j(版本1.2.17)来编写日志,我想为在REST服务上运行的每个服务编写不同的日志文件,但我只需要为整个应用程序使用一个Log4j属性 所以我想在我的日志文件夹中保存这种日志 所以我把它写成Log4j(restServiceLogger.pro