我已经构建了 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是否支持此类功能?我可以选择哪种方法适合我的用例吗?任何建议或帮助表示赞赏,谢谢。
答案 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的存储库上打开一个问题。