Play 2和Swagger的可选参数

Tom*_*ley 13 scala swagger playframework-2.2 swagger-play2

我正在尝试使用Swagger来记录Play 2 REST API,但swagger-play2似乎并不理解使用Scala Option类型定义的可选参数- 在Play 2中使参数可选的常规方法:

GET /documents controllers.DocumentController.getDocuments(q: Option[String])
Run Code Online (Sandbox Code Playgroud)

我希望qparam是可选的.这个Option[String]参数有一个匹配的带注释的控制器方法.在启动时,我进入UNKOWN TYPE日志并由api-docs生成的json中断swagger-ui:

UNKNOWN TYPE: scala.Option
[info] play - Application started (Dev)
Run Code Online (Sandbox Code Playgroud)

是否有另一种方法可以在Play 2中指定可选参数并让Swagger理解它?

Tom*_*ley 1

到目前为止,我发现的一种解决方法是从参数列表中删除参数,使用 Swagger 的@ApiImplicitParams注释并从控制器方法中的请求对象中获取参数。然后 Swagger 会认为该参数是可选的。

GET /documents controllers.DocumentController.getDocuments()
Run Code Online (Sandbox Code Playgroud)

然后在控制器中:

@ApiOperation(...)
@ApiImplicitParams(Array(
  new ApiImplicitParam(name = "q", value = "Query", required = false, dataType = "string", paramType = "query"),
))
def getDocuments = Action { implicit request => 
  // use param via request object
}
Run Code Online (Sandbox Code Playgroud)

这当然不如使用 Scala 的 Option 类型那么好,但它会生成正确的 Swagger 文档。