我正在将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注释,则忽略该注释。
答案 0 :(得分:1)
原来添加@ApiParam(hidden = true)似乎已经完成了这个伎俩。我以前试过这个并且没有得到结果,一定是在某个地方发生过错字。