Swagger-play2:如何使用@ApiImplicitParams 注释允许对象数组作为 swagger ui 中的输入?

沙希·谢卡尔

我正在尝试为采用案例类对象数组的方法编写 swagger API。我做了如下事情:

package models

import io.swagger.annotations.{ApiModel, ApiModelProperty}
import play.api.data.Form
import play.api.data.Forms.{mapping, nonEmptyText, seq}
import play.api.libs.json.{Json, Writes}
import spray.json.DefaultJsonProtocol

object Message extends DefaultJsonProtocol {

@ApiModel(value = "EmailMessage")
  case class EmailMessage(
                           @(ApiModelProperty@field)(position = 1, dataType = "array", required = true) emails: Seq[String],
                           @(ApiModelProperty@field)(position = 2, required = true) message: String
                         )

}

以及控制器的请求处理程序方法

@ApiImplicitParams(Array(
    new ApiImplicitParam(value = "EmailMessage", dataType = "models.Message.EmailMessage",
      paramType = "body", name = "body", required = true)
  ))

现在,当我尝试访问此 API 时,出现以下异常:

[error] application - Failed to resolve 'models.Message.EmailMessage' into class
java.lang.ClassNotFoundException: models.Message.EmailMessage
    at java.net.URLClassLoader.findClass(URLClassLoader.java:382)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
    at play.modules.swagger.PlayReader.typeFromString(PlayReader.java:447)
    at play.modules.swagger.PlayReader.readImplicitParam(PlayReader.java:423)
    at play.modules.swagger.PlayReader.readImplicitParameters(PlayReader.java:396)
    at play.modules.swagger.PlayReader.read(PlayReader.java:199)
    at play.modules.swagger.PlayReader.read(PlayReader.java:64)
    at play.modules.swagger.PlayReader.read(PlayReader.java:58)
    at play.modules.swagger.ApiListingCache$$anonfun$listing$1.apply(ApiListingCache.scala:17)
[info] swagger - Swagger - initialization done.

沙希·谢卡尔

好吧,我想通了。我所做的是从 Message 对象中取出 EmailMessage 案例类。


    @ApiModel(value = "EmailMessage")
      case class EmailMessage(
                               @(ApiModelProperty@field)(position = 1, 
    dataType = "List[String]", required = true) emails: Seq[String],
                               @(ApiModelProperty@field)(position = 2, 
    required = true) message: String
                             )

    object Message extends DefaultJsonProtocol {

    val EmailMessageForm = Form(
        mapping(
          "emails" -> seq(nonEmptyText),
          "message" -> nonEmptyText
        )(EmailMessage.apply)(EmailMessage.unapply)
      )

    }

在@ApiImplicitParam 中,我更改了dataType属性的值,如下所示

    @ApiImplicitParams(Array(
        new ApiImplicitParam(value = "EmailMessage payload data", dataType 
    = "models.EmailMessage",
      paramType = "body", name = "body", required = true)
      ))

现在应用程序运行没有任何错误。

但是当我将 swagger.json 呈现给 OpenAPI 时,我没有得到很好的用户输入界面。如果有人对此有任何想法,请告诉我。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

Swagger @ApiParam注释使Swagger UI中不需要使用@PathVariable注释的参数

让Swagger在Play2 Scala中工作

如何定义Swagger 2.0 JSON以在Swagger UI中填充默认主体参数对象?

我如何在swagger UI中输入嵌套数组的数据

Swagger:在Swagger UI中更改API路线

Swagger中的对象数组

Swagger UI:postode主体中的对象数组忽略explode = true

Swagger UI参数作为列表而不是文本输入

在Swagger UI中指示复杂输入参数对象的必需属性

在Swagger UI中实施搜索

在 Swagger UI 中拦截消息

Swagger 与 Play2 的集成

Swagger中的数据注释

如何连接 swagger-ui

Swashbuckle Swagger UI:如何从xml注释中的参数中删除必需的

如何使Swagger在生成的HTML中放入新行(在Swagger UI页面中)?

Web Api中的Swagger .netcore 3.1,使用swagger UI设置日期时间格式

使用falcon-swagger-ui在Falcon中难以提供Swagger API文档

swagger-ui响应示例作为定义中的参考

swagger对象是否可以在swagger-ui中具有默认值作为参数传递?

在swagger ui中使用@RequestParam带注释的方法

添加控制器后,在Swagger UI中不允许使用该方法

在 Swagger UI 的参数列表中显示 json 对象属性

在Flask-Restplus Swagger UI中停用表单输入

在swagger ui中自定义输入验证

Swagger-UI和Ktor如何导入swagger.json或.yaml文件并启动Swagger-UI?

如何从Swagger UI导出Swagger JSON / YAML文件?

如何在Azure Easy API中启用Swagger UI

如何安排Swagger UI中显示的Docket的groupName的顺序