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

OpenAPI/Swagger-UI注释&@BeanParam

鄂伟兆
2023-03-14
    @Path("/{communityIdentifier}")
    @GET
    @Operation(summary = "Get community details", description = "Get detailed information about a community")
    @APIResponses({
            @APIResponse(responseCode = "200", description = "The community details", content = @Content(schema = @Schema(ref = "community"))),
            @APIResponse(name = "401", responseCode = "401", description = "Authentication required"),
            @APIResponse(name = "403", responseCode = "403", description = "Permission denied - you do not have access to access this resource", content = @Content(schema = @Schema(ref = "baseError"))),
            @APIResponse(name = "404", responseCode = "404", description = "Resource not found", content = @Content(schema = @Schema(ref = "baseError"))),
            @APIResponse(name = "500", responseCode = "500", description = "Internal service error", content = @Content(schema = @Schema(ref = "baseError"))) })
    @Timed(name = "getCommunityTimer")
    @Counted(name = "getCommunityCount")
    public Response getCommunity(
            @PathParam("securityRealm") @Parameter(name = "securityRealm", description = "The security realm name", required = true) String securityRealmName,
            @PathParam("communityIdentifier") @Parameter(name = "communityIdentifier", description = "The community identifier", required = true) String communityIdentifier) {
 // Stuff
}

当我访问我的Swagger UIendpoint时,我会看到这个服务的记录良好的条目,包括关于SecurityRealmCommunityIdentifier参数的信息。现在,我试图以类似的方式创建postput方法,但遇到了一个问题。

由于我的put/post请求包含许多表单参数,所以我将它们封装到一个对象中,并用@BeanParam注释该方法。我的表单对象如下所示:

public class CommunityRequestForm extends AbstractRequestForm {

    private static final long serialVersionUID = 6007695645505404656L;

    @FormParam("description")
    private String description = null;

    @FormParam("name")
    private String name = null;

    public String getDescription() {
        return description;
    }

    public String getName() {
        return name;
    }

    public void setDescription(String description) {
        this.description = description;
    }

    public void setName(String name) {
        this.name = name;
    }

}

我的post方法如下所示:

    @Path("/")
    @POST
    @Consumes({ MediaType.APPLICATION_FORM_URLENCODED })
    @Operation(summary = "Create a community", description = "Creates a new community within a security realm")
    @APIResponses({
            @APIResponse(responseCode = "201", description = "The community details", content = @Content(schema = @Schema(ref = "community"))),
            @APIResponse(name = "401", responseCode = "401", description = "Authentication required"),
            @APIResponse(name = "403", responseCode = "403", description = "Permission denied - you do not have access to access this resource", content = @Content(schema = @Schema(ref = "baseError"))),
            @APIResponse(name = "404", responseCode = "404", description = "Resource not found", content = @Content(schema = @Schema(ref = "baseError"))),
            @APIResponse(name = "500", responseCode = "500", description = "Internal service error", content = @Content(schema = @Schema(ref = "baseError"))) })
    public Response createCommunity(
            @PathParam("securityRealm") @Parameter(name = "securityRealm", description = "The security realm name", required = true) String securityRealmName,
            @BeanParam CommunityRequestForm communityForm) {
  // Stuff
}
@FormParam("description")
@Parameter(name = "description", required = true, style = ParameterStyle.FORM)
private String description = null;

什么也没做。我尝试将方法签名更改为如下所示:

public Response createCommunity(
            @PathParam("securityRealm") @Parameter(name = "securityRealm", description = "The security realm name", required = true) String securityRealmName,
            @Parameter(style = ParameterStyle.FORM) @BeanParam CommunityRequestForm communityForm)

还是什么都没有。我的问题是,是否有一种方法可以让OpenAPI/Swagger-UI注释更好地发挥作用,并记录一个@BeanParam注释对象?还是根本不支持这种方法?

共有1个答案

夹谷山
2023-03-14

我知道他们在SmallRye OpenAPI 1.1.5中改进了这一切,使用了以下公关:https://github.com/SmallRye/smallrye-open-api/pull/138。

Quarkus 0.22.0仍然使用1.1.3。我们已经在master中更新到1.1.8,所以即将发布的0.23.0将有更新。

您可以尝试使用Quarkus主分支(只需使用MVN clean install-dskiptests-dskipits构建它,然后将版本更改为999-snapshot)。希望事情会好起来。

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

  • 我正在生成Restendpoint,包括向生成的代码添加Openapi/Swagger注释。 虽然它可以很好地处理基本类型,但我在自定义类方面有一些问题。 现在我有很多自定义类的重复模式条目(使用@Schema(实现=MyClass.class)),但至少需要的信息在那里。然而,我想找到一种方法来删除重复的模式条目,同时保留附加信息。 在一个讨论$ref和缺乏兄弟属性的github问题上,我发现了

  • 当使用与SpringDoc-OpenAPI捆绑的CSRF头时,是否有一种方法可以自动地将CSRF头包含到从swagger ui发出的请求中? springfox(GitHub)中似乎实现了类似的解决方案,但我没有找到关于是否可以用SpringDoc-OpenAPI实现这一点的信息。

  • 我有以下代码,这是我的API的艺术 如果我有@ApiParam注释,@PathVariable就变成非必需的,所以如果我没有输入userId并通过Swagger UI发出请求,请求仍然会转到服务器,这会导致不必要的服务器错误。默认情况下,@Path变量的参数“必需”为true(因此,默认值为@PathVariable(name=“userId”,必需=true)),并且在该参数上没有@ApiPar

  • 我开发了一个带有Swagger注释的REST API。我已经能够展示一个炫耀的ui应用程序的api文档,非常好。 问题:根据我的注释,我试图使用swagger提供的url生成符合该规范的客户端。问题是,它似乎是不兼容的,或者至少,我不知道如何做swagger编辑器读取我的网址,并从那时起,产生客户。但是swagger编辑器向我报告了一些错误... 是否可以将我的带注释的 swagger api 与

  • 我使用springfox-swagger2和springfox-swagger-ui(version2.9.2)进行了一个spring boot application,根据我的组件及其注释方法,生成了良好的交互式api文档。 我希望通过自定义注释增强生成的文档(例如,通过javadoc)。有没有办法做到这一点?我已经读了几个教程,我不是守望者...