我正在尝试为采用案例类对象数组的方法编写 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] 删除。
我来说两句