2

我有以下暗示:

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 和数据作为输入参数)

现在我正在尝试编写负载测试并使用喷雾客户端执行 JSON 请求。不幸的是,它不想接受我的对象作为输入参数,错误:

[错误] Load.scala:85: 找不到类型>spray.httpx.marshalling.Marshaller[models.StartObj.Start] [错误] pipeline(Post(serverHost, newUser)) [错误] ^

我开始创建一个可以解决此问题的编组器:

  implicit val StartObjMarshaller =
    Marshaller.of[Start](ContentTypes.`application/json`) 
    { (value, contentType, ctx) ⇒ 
       ctx.marshalTo(HttpEntity(contentType, value))
    }

但是在这里它抱怨 value 不是受支持的类型。它只需要字节数组或字符串。我需要字符串但采用 Json 格式,我应该如何编写这个编组器才能正确解决问题?

谢谢!

4

1 回答 1

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)
  }
于 2013-09-08T03:24:08.603 回答