我有以下暗示:
object MyJsonProtocol extends DefaultJsonProtocol {
implicit val impStartObjSys = jsonFormat3(StartObj.Sys)
implicit val impStartObjData = jsonFormat6(StartObj.Data)
implicit val impStartObjStart = jsonFormat3(StartObj.Start)
}
它适用于Spray路由器,我通常可以将一个对象解组为StartObj.Start(它接受一个字符串,sys和数据作为输入参数)
现在我正在尝试使用spray-client编写负载测试并执行JSON请求。不幸的是,它不想接受我的对象作为输入参数,错误:
[error] Load.scala:85:找不到类型> spray.httpx.marshalling.Marshaller [models.StartObj.Start]类型的证据参数的隐含值 [错误]管道(Post(serverHost,newUser)) [错误] ^
我开始创建一个解决此问题的编组器:
implicit val StartObjMarshaller =
Marshaller.of[Start](ContentTypes.`application/json`)
{ (value, contentType, ctx) ⇒
ctx.marshalTo(HttpEntity(contentType, value))
}
但是在这里它抱怨价值不是受支持的类型。它只需要字节数组或字符串。我需要String但是在Json格式中,我应该如何编写这个marshaller以便它正确解决问题?
谢谢!
答案 0 :(得分:2)
好的,我想出来了。我需要添加此导入以支持json编组:
import spray.httpx.SprayJsonSupport._
之后编组功能将是:
implicit def StartObjMarshaller[T](implicit writer: RootJsonWriter[T],
printer: JsonPrinter = PrettyPrinter) =
Marshaller.delegate[T, String](ContentTypes.`application/json`) { value ⇒
val json = writer.write(value)
printer(json)
}