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

@使用@Parameter注释时,BeanParam未记录

卫博
2023-03-14

我试图用< code > swagger-maven-plugin 来记录我的api。

当我用< code>@Parameter注释路由参数时,只要没有用< code>@BeanParam注释,就会在openapi生成的文件中很好地记录下来。

如招摇岩心文件所述,

@Parameter可以代替或与JAX-RS参数注释(@PathParam、@QueryParam、@HeaderParam、@@FormParam和@BeanParam)一起使用。当swagger-core/swagger-jaxrs2默认扫描这些注释时,@Parameter允许定义参数的更多细节。

如何将我的@BeanParam参数记录在我的 openapi 文件中?

这是我的pom.xml

<dependencies>
    <dependency>
        <groupId>io.swagger.core.v3</groupId>
        <artifactId>swagger-jaxrs2</artifactId>
        <version>2.1.1</version>
    </dependency>
</dependencies>

<build>
    <plugins>
        <plugin>
            <groupId>io.swagger.core.v3</groupId>
            <artifactId>swagger-maven-plugin</artifactId>
            <version>2.1.1</version>
            <configuration>
                <outputFileName>openapi</outputFileName>
                <outputPath>target/doc</outputPath>
                <outputFormat>YAML</outputFormat>
                <resourcePackages>...</resourcePackages>
                <readAllResources>false</readAllResources>
            </configuration>
            <executions>
                <execution>
                    <phase>generate-resources</phase>
                    <goals>
                        <goal>resolve</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>

这是我的注释api:

@GET
@Path("/authorize")
@Operation(summary = "Summary", description = "Description")
Response authorize(
        // Parameter doesn't show up in generated documentation
        @Parameter(
                description = "Request",
                name = "request",
                required = true
        )
        @BeanParam Oauth2AuthorizationRequest request,
        // Parameter shows up correctly in generated documentation
        @Parameter(
                description = "Session id",
                name = "sessionId",
                required = true
        )
        @CookieParam("sessionId") String sessionId
);

生成的文件是:

openapi: 3.0.1
paths:
  /auth/oauth2/authorize:
    get:
      summary: Summary
      description: Description
      operationId: authorize
      parameters:
      - name: sessionId
        in: cookie
        description: Session id
        required: true
        schema:
          type: string

共有1个答案

芮叶秋
2023-03-14

经过一些测试,我成功地在openapi文件中记录了我的<code>@BeanParam</code>。注释必须放在类中注释@BeanParam,如下所示:

public class Oauth2AuthorizationRequest {
    // Use the @Parameter annotation to document the attribute.
    @HeaderParam("Authorization")
    @Parameter(description = "Authorization header")
    String authorization;

    // If the attribute is a @FormParam, use the @Schema annotation.
    @FormParam("client_id")
    @Schema(description = "The id of the client")
    String client_id;

    // If the attribute is a @FormParam and is required, 
    // use the @Schema annotation for the description
    // and the @Parameter one to set it as required.
    @FormParam("grant_type")
    @Schema(description = "Should be either \"credentials\" or \"password\"")
    @Parameter(required = true)
    String grant_type;
}

endpoint简化如下:

@GET
@Path("/authorize")
@Operation(summary = "Summary", description = "Description")
Response authorize(
    // No more annotation on the @BeanParam
    @BeanParam Oauth2AuthorizationRequest request,
    @Parameter(
        description = "Session id",
        name = "sessionId",
        required = true
    )
    @CookieParam("sessionId") String sessionId
);
 类似资料:
  • 我使用的是JAX-RS注解,但我遇到了@BeanParam的问题。我用的是Wildfly-Swarm和maven。以下几行是我错误的一部分:

  • 当我访问我的Swagger UIendpoint时,我会看到这个服务的记录良好的条目,包括关于和参数的信息。现在,我试图以类似的方式创建和方法,但遇到了一个问题。 由于我的/请求包含许多表单参数,所以我将它们封装到一个对象中,并用注释该方法。我的表单对象如下所示: 我的方法如下所示: 什么也没做。我尝试将方法签名更改为如下所示: 还是什么都没有。我的问题是,是否有一种方法可以让OpenAPI/Sw

  • 我想创建自己的自定义注释,我使用的是Spring框架。 当有人注释他的POJO类时,后面的代码将触发方法。 例如@Sensetive(values=“accountNumber”)在下面的类上注释时 将调用一个方法,在记录值时,这些值将被屏蔽(例如accountNumber=“12345”- 我知道@ToString注释可以在调用toString方法时完全排除值,但是否有可能屏蔽它?

  • 我有问题时,试图显示数据到UI。 当我在MySQL中使用这个查询从我的表中获取Datetime日期时。它确实会返回我想要的记录 但是当我使用Spring向表单输入相同的数据并提交时,没有任何东西返回。我使用的输入是相同的。 我也尝试输入显示在屏幕中的值,这是2018-02-05 08:00:00.0但没有Lucks。 有人能给我一点主意吗?请救命!

  • 我有一个具有@Slf4j注释的类。 我试着写一个测试和模拟记录仪,但它不起作用。 测试是这样的: 这是我得到的错误: 问题是,如何嘲笑伐木工?

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