使用Swagger-UI @ApiParam注释@FormParam字段

时间:2014-10-30 11:09:31

标签: java api jax-rs resteasy swagger

我已经构建了 RestEasy API 并将其与 Swagger UI 相关联。我被要求完成的一项任务是,找到一种方法来减少方法签名中的查询参数,并在某种类型的" DTO"中处理它们。

我的原始实现类似于:

  @GET
  @ApiOperation(value = "echo test value", notes = "echo test notes")
  @ApiResponse(code = HttpServletResponse.SC_OK, message = "Response.status.OK")
  public Response echoTest(
    @ApiParam("id") @QueryParameter("id") final int id,
    @ApiParam("fName") @QueryParameter("fName") final String fName,
    @ApiParam("sName") @QueryParameter("sName") final String sName) {

    // handle request

  }

我已经将查询参数处理提取到了DTO,虽然现在我不确定如何处理Swagger-UI方面的事情。正如我猜测的那样,我试图在DTO中注释字段,这不起作用。我的当前解决方案没有正确的swagger-ui互动:

  @GET
  @ApiOperation(value = "echo test value", notes = "echo test notes")
  @ApiResponse(code = HttpServletResponse.SC_OK, message = "Response.status.OK")
  public Response echoTest(@ApiParam("form") @FormParam QueryDTO dto) {

    //Handle request

  }

QueryDTO.java:

public class QueryDTO {

  @ApiParam(name = "id", value = "user id") @QueryParam("id") private int id;
  @ApiParam(name = "fName", value = "user first name") @QueryParam("fName") private String fName;
  @ApiParam(name = "sName", value = "user surname") @QueryParam("sName) private String sName;

  // Getters,setters etc

}

SwaggerUI是否支持此类功能?我可以选择哪种方法适合我的用例吗?任何建议或帮助表示赞赏,谢谢。

1 个答案:

答案 0 :(得分:3)

这里的问题不是Swagger-UI而是Swagger-Core。

Swagger-Core不支持RESTEasy的@Form注释,只支持标准的JAX-RS注释。

在你提到它之前,我对这个注释并不熟悉,但看起来它的行为与JAX-RS 2.0中引入的@BeanParam相同。 RESTEasy 3.0及更高版本应提供对它的支持。 Swagger-core能够处理@ BeanParam以生成适当的文档。

如果你仍然只想支持@Form,你必须在Swagger-Core的存储库上打开一个问题。