不能应用于 (play.api.mvc.AnyContent)

cannot be applied to (play.api.mvc.AnyContent)

当我尝试将我的请求正文内容转换为 json 时,发生了这种情况..

代码:

def addItem() = Action { implicit request =>
    val content:AnyContent = request.body
    val res = Json.parse(content)
    Ok("done")   
  }

sbt 编译信息:

**overloaded method parse with alternatives:
[error]   (input: Array[Byte])play.api.libs.json.JsValue <and>
[error]   (input: java.io.InputStream)play.api.libs.json.JsValue <and>
[error]   (input: String)play.api.libs.json.JsValue
[error]  cannot be applied to (play.api.mvc.AnyContent)
[error]     val res = Json.parse(content)**

我想知道为什么我不能将我的内容转换为 json?

AnyContent 提供辅助方法 asJson:

ef addItem() = Action { implicit request =>
    val content: AnyContent = request.body
    val res: Option[JsValue] = content.asJson
    Ok("done")   
}

或者,您可以直接使用 Play 的正文解析器:

def addItem() = Action(parse.json) { implicit request: Request[JsValue] =>
  val content: JsValue = request.body
  // ...
  Ok("done")   
}

如果内容不是JSON,它会自动给出 HTTP 400。

https://www.playframework.com/documentation/2.8.x/ScalaBodyParsers