gpt4 book ai didi

json - 在 Play Framework 2.0 Scala 中处理 JSON 请求

转载 作者:行者123 更新时间:2023-12-04 19:12:54 26 4
gpt4 key购买 nike

我正在尝试使用 JSON 请求将数据从客户端发送到服务器。 JSON 请求的正文如下所示:

{
"upload":
{
"ok":"some message",
"assemblyId":"a9d8f72q3hrq982hf98q3"
}
}

Play 能够将请求正文识别为 JSON,但是当我尝试解析单个值(即“上传”对象)时,Play 提示它找不到指定的参数。

Scala方法如下:
def add(course:Long) = withAccount { account => implicit request =>
println()
println(request.body) // output: AnyContentAsJson({"upload":{"ok":"ASSEMBLY_COMP...

request.body.asJson.map { json =>
println()
println(json) // output: {"upload":{"ok":"ASSEMBLY_COMPLETED","assemb...

(json \ "upload").asOpt[models.SomeClass].map { upload =>
Ok("Got upload")
}.getOrElse {
BadRequest("Missing parameter [upload]")
}
}.getOrElse {
BadRequest("Expecting Json data")
}
}

我无法理解上述代码失败的原因。该方法将请求正文映射到 json 对象没有问题。 “println(json)”命令打印出与 Chrome 显示的“请求有效负载”完全相同的内容。然而,当我尝试获取根对象“上传”时,它失败了。该方法返回一个错误的请求,提示缺少参数。

最佳答案

要做 asOpt[models.SomeClass] 需要一个 Reads让它工作的实例。

这是一个例子

case class SomeClass(ok: String, assemblyId: String)
implicit object SomeClassReads extends Reads[SomeClass] {
def reads(json: JsValue) =
SomeClass((json \ "ok").as[String], (json \ "assemblyId").as[String])
}

您可以在以下位置查看如何实现 Reads 实例
https://github.com/playframework/Play20/blob/2.0.x/framework/src/play/src/main/scala/play/api/libs/json/Reads.scala#L35

关于json - 在 Play Framework 2.0 Scala 中处理 JSON 请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13426752/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com