未找到参数证据$2的隐式:正文可写[映射[字符串,对象]]



正在播放ws,并且必须将请求参数准备为{"initVideoUploadParams": {"videoMetadataParams":{"metadata":{"name":","description":"}}}}} .尝试了链接中给出的解决方案,但没有奏效,因为我的情况与该问题不相似。 下面是代码片段

ws.url(savaUrl+configObj.get[String]("kaltura.init"))
.post(Map("initVideoUploadParams" -> InitVideoUploadParams(fileName,fileName)))

和案例类

case class InitVideoUploadParams(name:String,desc:String)
object InitVideoUploadParams {
implicit object InitVideoUploadParamsWrites {
def writes(name:String,desc:String): JsObject = Json.obj(
"videoMetadataParams" -> VideoMetadataParams(Utils.createVideoParamsMap(name,desc)).metadata
)   } }
case class VideoMetadataParams(metadata: Map[String, String])
object VideoMetadataParams {   implicit object VideoMetadataParamsWrites {
def writes(metadata:Map[String,String]): JsObject = Json.obj(
"metadata" -> metadata
)   } }

浏览了播放文档,但无法实现。 帮助我了解我的代码出了什么问题。

>您正在尝试使用 Play-WSPOST类型为Map[String, InitVideoUploadParams]的值。为了使 Play 知道如何将该类型序列化为 JSON,隐式作用域中需要有一个类型Writes[InitVideoUploadParams]的对象。显然,您正在尝试使用这些implicit object来执行此操作,但是您需要扩展Writes才能使其正常工作:

import play.api.libs.json.Writes
object InitVideoUploadParams {
implicit object InitVideoUploadParamsWrites extends Writes[InitVideoUploadParams] {
def writes(o: InitVideoUploadParams): JsValue = {
??? // implementation goes here
}
}
}

但是,在Writes伴随对象上使用方法要简单一些:

import play.api.libs.json.Writes
object InitVideoUploadParams {
implicit val writes: Writes[InitVideoUploadParams] = Writes { o =>
??? //implementation goes here
}
}

相关内容

最新更新