Json 未找到参数证据$2:BodyWritable[Map[String,Object]]的隐式表达式

Json 未找到参数证据$2:BodyWritable[Map[String,Object]]的隐式表达式,json,scala,playframework,ws,Json,Scala,Playframework,Ws,在play ws上工作,必须将请求参数准备为{“initVideoUploadParams”:{“videoMetadataParams”:{“metadata”:{“name”:“description”:“}}}}。尝试了中给出的解决方案,但没有成功,因为我的案例与该问题不同。 下面是代码片段 ws.url(savaUrl+configObj.get[String]("kaltura.init")) .post(Map(&q

在play 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
    )   } }
已经看完剧本,但无法实施。
请帮助我了解我的代码有什么问题。

您试图
发布
类型的值
Map[String,InitVideoUploadParams]
与Play WS。为了让Play知道如何将该类型序列化为JSON,隐式作用域中需要有一个
Writes[InitVideoUploadParams]
类型的对象。显然,您正试图使用那些
隐式对象
s来实现这一点,但您需要扩展
写入操作
,以使其正常工作:

import play.api.libs.json.Writes
对象初始化视频上载参数{
隐式对象InitVideoUploadParams写入扩展写入[InitVideoUploadParams]{
def写入(o:InitVideoUploadParams):JsValue={
???//实现在这里进行
}
}
}
但是使用
Writes
伴生对象上的方法要简单一些:

import play.api.libs.json.Writes
对象初始化视频上载参数{
隐式val写入:写入[InitVideoUploadParams]=写入{o=>
???//实现在这里进行
}
}

您正在尝试
发布
类型的值,该值映射[String,InitVideoUploadParams]
与Play WS。为了让Play知道如何将该类型序列化为JSON,隐式作用域中需要有一个
Writes[InitVideoUploadParams]
类型的对象。显然,您正试图使用那些
隐式对象
s来实现这一点,但您需要扩展
写入操作
,以使其正常工作:

import play.api.libs.json.Writes
对象初始化视频上载参数{
隐式对象InitVideoUploadParams写入扩展写入[InitVideoUploadParams]{
def写入(o:InitVideoUploadParams):JsValue={
???//实现在这里进行
}
}
}
但是使用
Writes
伴生对象上的方法要简单一些:

import play.api.libs.json.Writes
对象初始化视频上载参数{
隐式val写入:写入[InitVideoUploadParams]=写入{o=>
???//实现在这里进行
}
}

您的案例类看起来有误。你确定应该是地图吗?在您链接的示例中,它看起来是这样的:case类消息(toID:Seq[String],fromID:String,userID:String,mailContent:String)对象消息{implicit val writes:writes[Message]=Json.writes[Message]}我想要的最后一个请求Json是{“initVideoUploadParams”:{“videoMetadataParams”:{“metadata”:{“name”:“description”:}}}所以我为metatdata添加了Map[String,String]。如果没有地图,我还应该用什么@在这个例子中,映射是json。因此JSON在文章中成为了一个映射。您的case类看起来是错误的。你确定应该是地图吗?在您链接的示例中,它看起来是这样的:case类消息(toID:Seq[String],fromID:String,userID:String,mailContent:String)对象消息{implicit val writes:writes[Message]=Json.writes[Message]}我想要的最后一个请求Json是{“initVideoUploadParams”:{“videoMetadataParams”:{“metadata”:{“name”:“description”:}}}所以我为metatdata添加了Map[String,String]。如果没有地图,我还应该用什么@在这个例子中,映射是json。因此,JSON在文章中成为了一个映射。