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

使用 OpenApi 注释记录多种响应可能性

姬墨竹
2023-03-14

根据传入的参数,我有一个可以返回单个项目或项目列表的endpoint(目前endpoint没有灵活性,我无法更改代码)。

我试图生成API留档与OpenApi注释。

我的endpoint:{{url}}/资格/{qualification_id}/持有者/{holder_id}

{qualification_id}参数是可选的。如果只提供了{}参数,则返回已获得资格的人员列表,例如:

{{url}}/资格/156/持有人返回

<holder>
    <holder>
        <id>34</id>
        <name>Tim</name>
        <expired>false</expired>
    </holder>
    <holder>
        <id>87</id>
        <name>Andy</name>
        <expired>false</expired>
    </holder>
    <holder>
        <id>346</id>
        <name>Ralph</name>
        <expired>true</expired>
    </holder>
<holder>

为此,我的响应注释是:

@OA\Response(
    response=200,
    @OA\JsonContent(
        type="array",
        @OA/Items(ref="#/components/schemas/QualificationHolder")
    )
)

但是,如果还提供了{holder_id}参数,则仅返回特定的资格记录持有人,例如:

{{url}}/qualification/156/holder/346返回:

<holder>
    <id>346</id>
    <name>Ralph</name>
    <expired>true</expired>
</holder>

对此,我的回答是:

@OA\Response(
    response=200,
    @OA\JsonContent(ref="#/components/schemas/QualificationHolder")
)

我的问题是我不知道如何组合这些,以便使用OpenApi注释生成的留档表明响应可以是这些选项中的任何一个,我也找不到任何在线留档来指示任何东西。我找到的一切都指向如何设置json/yaml文件,这不是我需要的。

共有1个答案

戚翰飞
2023-03-14

在深入研究了< code>zircote/swagger-php代码并在查看示例时做了一些假设之后,我通过使用以下注释让它工作了:

@OA\Response(
    response=200,
    @OA\JsonContent(
        oneOf={
            @OA\Schema(ref="#/components/schemas/QualificationHolder"),
            @OA\Schema(
                type="array",
                @OA\Items(ref="#/components/schemas/QualificationHolder")
            )
        }
    )
)
 类似资料:
  • 如何使用java注释创建多个404响应(或者更广泛地说,多个相同的HTTP代码响应)。 我试过: 还有多个: 我能得到类似于多重的东西的唯一方法是使用: 这并不理想,因为它需要人与人之间的互动来查看所有这些内容,而这只是不需要的;我们的期望是: 或者更好: 我正在使用springdoc和以下dep:

  • 我试图用< code > swagger-maven-plugin 来记录我的api。 当我用< code>@Parameter注释路由参数时,只要没有用< code>@BeanParam注释,就会在openapi生成的文件中很好地记录下来。 如招摇岩心文件所述, @Parameter可以代替或与JAX-RS参数注释(@PathParam、@QueryParam、@HeaderParam、@@Fo

  • 我知道有了OpenAPI3,我可以使用oneOf/anyOf,但目前我们无法升级到OpenAPI3。在其中一个定义中,我需要使用许多没有公共属性的响应类型(基本上,响应是没有任何方法/属性的接口,并且有多个不同的实现)。我能用openapi 2定义多种响应类型吗?是否可以使用例如标题/内容类型/。。。要区分此响应类型并使用有效的openapi2定义? 谢谢

  • 我需要记录我的服务器在调用后发送的响应,因为我接收到一个MalformedJsonException,以查看发生了什么。 我正在使用以下代码: 在本教程之后,我已经完成了这一步。我在“.client(client)”中发现一个错误;行:“client()在reverfit中不能应用于(com.squareup.okhttp.okhttpclient) 我做错了什么?我需要做什么来截取来自服务器的响

  • 我想让Univocity使用带注释的bean实例来确定CSV内容的一部分,即仅前几列。其余的列由一些复杂的编程逻辑提供,这些逻辑独立于bean实例或类型。 我知道Univocity可以将带注释的bean转换为记录,但我找不到如何处理带注释的bean以获得部分记录,而我可以在不使用带注释的bean的情况下以编程方式确定记录的其余部分。 bean将使用@Headers和@Parsed注释进行注释。(带

  • 我正在使用从以下依赖项导入的Swagger/OpenAPIV3注释创建应用程序的API描述: 其中一个批注是批注,它接受名为的属性,该属性允许字符串数组: 现在,我想使用在枚举类上构造的自定义方法,该方法返回允许的字符串数组,因此不需要在每次向枚举添加类型时添加该方法。以便我们可以这样使用它: 现在这是无法编译的,因为在执行注释时不知道该方法。是否有这样的解决方案允许在SwaggerV3注释属性值