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理解它?
到目前为止,我发现的一种解决方法是从参数列表中删除参数,使用 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 文档。