如何告诉dropwizard-swagger / swagger-ui资源方法上没有请求体?

时间:2018-05-29 20:34:27

标签: swagger swagger-ui dropwizard

我正在将dropwizard-swagger集成到一个大型现有项目中。 我现在已经启动并运行了Swagger UI端点,但我注意到每个方法都必须具有body参数似乎是坚定的。

具体而言,方法定义中没有@ApiParam注释的第一个参数被解释为请求主体。似乎没有办法指定一个body参数,也似乎没有办法排除Swagger UI自动标记参数的方法。这意味着“试一试”功能对大部分端点不起作用,因为规范不允许使用实体,但Swagger UI一直坚持它们存在。

例如,请考虑UserResource文件中的以下方法:

@GET
@Path("v1/users/{userId}/subscriptions")
@ApiOperation(value = "Get user subscriptions", notes = "Returns information about the users current and past subscriptions.")
@UserAccessRequired
@RolesAllowed({//a list of appropriate roles})
@Produces(CompanyMediaType.APPLICATION_API_V1_JSON)
public SubscriptionsDTOV1 getSubscriptionsForUser(@Auth DashboardUser dashboardUser, @JooqInject DSLContext database,
                                                  @Context ResourceContext resourceContext,
                                                  @Context ContainerRequestContext crc,
                                                  @ApiParam(value = "ID of user", type = "Integer") @NotNull @UnwrapValidatedValue @PathParam("userId") IntParam userId) {

Swagger将第一个参数@Auth DashboardUser dashboardUser解释为请求正文,并在Swagger UI中生成以下视图:

Swagger UI with a body parameter

由于这是GET,因此不允许拥有正文,并且在测试时尝试删除Swagger UI中正文的内容不起作用,因为字段自动填充与{}

如何向Swagger表明此处没有身体参数并让它发挥作用?仅将@ApiParam放在其他方法参数之前不起作用,因为如果不存在@QueryParam / @PathParam / etc注释,则忽略该注释。

1 个答案:

答案 0 :(得分:1)

原来添加@ApiParam(hidden = true)似乎已经完成了这个伎俩。我以前试过这个并且没有得到结果,一定是在某个地方发生过错字。