正在播放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
}
}