我正在处理java API的swagger文档生成,这些API全面重用了许多公共路径结构,因此我们创建了许多@BeanParms来帮助管理这些。下面是一个api和@beanparam的示例:
@POST
@Path("/entry/region/{regionId}/folder/{folderId}/entries")
@Consumes(APPLICATION_JSON)
@Produces(APPLICATION_JSON)
@Operation(operationId = "createEntry", description = "Create an entry")
@Tag(name = "external")
@RequestBody(content = @Content(mediaType = APPLICATION_JSON, schema = @Schema(ref = "EntryRequest")))
@APIResponse(responseCode = "201", ref = "Created")
@APIResponse(responseCode = "400", ref = "BadRequest")
public Response createEntry(@BeanParam EntryPath path,
@NotNull @Valid EntryRequest request) {
return entryCreateService.createEntry(path, request);
}
下面是用作@beanparam的类:
public class EntryPath {
@Parameter(in = ParameterIn.PATH)
@PathParam("regionId")
protected String regionId;
@Parameter(in = ParameterIn.PATH)
@PathParam("folderId")
protected String folderId;
public String getRegionId() {
return regionId;
}
public String getFolderId() {
return folderId;
}
}
这是一个例子,我们有其他各种@BeanParms,最多有三个或四个路径参数。
现在,当使用代码生成器生成一个招摇过市的文件时,@beanparam根本就没有被使用。我希望找到它封装的路径参数。相反,我们看到的是:
paths:
/entry/region/{regionId}/folder/{folderId}/entries:
post:
tags:
- external
description: Create an entry
operationId: createEntry
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/EntryRequest'
responses:
"201":
$ref: '#/components/responses/Created'
"400":
$ref: '#/components/responses/BadRequest'
...
“entrypath”beanparam中的路径参数应该包含在这里,但它们已被完全传递。然而,当我们在方法签名(在其他API中)中使用简单的@pathparam时,没有问题。
我试过几种方法来解决这个问题,比如
在类及其字段上用@schema注解beanparam类(就像我们对请求主体类所做的那样),
在beanparam类中向@pathparam注解添加更多字段:例如。 @Parameter(in = ParameterIn.PATH, name = "regionId", required = true)
将@apimodel和/或@apimodelproperty粘贴到方法签名中的beanparam和beanparam本身上,
添加swagger-jersey2-jaxrs作为依赖项,如在线其他地方建议的那样,
这些因素的组合
没有成功。
真的希望有人能在这方面提供帮助-到目前为止,这已经有点死胡同了。
暂无答案!
目前还没有任何答案,快来回答吧!