için JsonWriter veya JsonFormat tipi sınıfı bulunamıyor Sınıfıma http İsteğini yerleştirdiğim yer var. Burası bir json'a ihtiyacım olan yer. Burada Püskürtme Json:
package com.webtrekk.cometd
import com.webtrekk.json._
import spray.json._
import scala.concurrent.Future
import scala.concurrent.duration._
import akka.util.Timeout
import akka.pattern.ask
import akka.io.IO
import spray.can.Http
import scala.util.{ Success, Failure }
import akka.actor.ActorSystem
import spray.http._
import HttpMethods._
import spray.http.HttpHeaders._
import spray.http.ContentTypes._
import spray.http.MediaTypes._
import scala.concurrent.Future
class Handshake(var url:String, var token:String){
val handshake = com.webtrekk.json.Handshake
implicit val system: ActorSystem = ActorSystem("salesforce")
implicit val timeout: Timeout = Timeout(15.seconds)
def execute() {
val contentType = new ContentType(MediaTypes.`application/json`, Option(HttpCharsets.`UTF-8`))
val httpHeader = List(RawHeader("Authorization", "Bearer "+token))
val httpEntity = HttpEntity(
contentType,
handshake.toJson)
val responseFuture: Future[HttpResponse] =
(IO(Http) ? HttpRequest(
method = POST,
uri = url,
entity = httpEntity,
headers = httpHeader)).mapTo[HttpResponse]
}
}
Ve
Ben de RootJsonFormat genişletilmiş Tokalaşma Json Protokolüpackage com.webtrekk.json
import spray.json._
import DefaultJsonProtocol._
class Handshake(
val channel: String = "/meta/handshake",
val id: Int = 1,
val supportedConnectionTypes: Vector[String] = Vector("long-polling"),
val version: String = "1.0",
val minimumVersion: String = "1.0") {
var successful: Boolean = false
var clientId:String = ""
}
class HandshakeProtocol extends DefaultJsonProtocol {
implicit object HandshakeJsonFormat extends JsonFormat[Handshake] {
def write(h: Handshake): JsValue =
JsObject(
"channel" -> JsString(h.channel),
"id" -> JsNumber(h.id),
"supportedConnectionTypes" -> JsArray(h.supportedConnectionTypes.map(value => JsString(value))),
"version" -> JsString(h.version),
"minimumVersion" -> JsString(h.minimumVersion)
)
def read(value: JsValue): Handshake =
value.asJsObject.getFields(
"channel",
"id",
"supportedConnectionTypes",
"version",
"minimumVersion",
"successful",
"cliendId"
) match {
case Seq(
JsString(channel),
JsNumber(id),
JsArray(supportedConnectionTypes),
JsString(version),
JsString(minimumVersion),
JsBoolean(successful),
JsString(clientId)
) => {
var handshake = new Handshake(
channel,
id.toInt,
supportedConnectionTypes.map(value => value.toString),
version,
minimumVersion)
handshake.successful = successful
handshake.clientId = clientId
handshake
}
case _ => throw new DeserializationException("JSON Error: Handshake Json Structure isn't correct!")
}
}
}
olduğunu. Ama bu da işe yaramıyor. toJson yönteminin neden çalışmadığı konusunda hiçbir fikrim yok. Ben Scala 2.11.7
için teşekkürler Yazdıklarınız, 'toJson' olarak adlandırdığınız yerde olmayacaktır. Bunları doğrudan içe aktarmanız veya "El Sıkışma" nın eşlik eden nesnesine eklemeniz gerekir. – tryx
Nesneye eklenmesiyle ne demek istiyorsunuz? Genişletme? –
Tamam: Bende var: örtük val handshakeFormat = HandshakeJsonFormat el sıkışma sınıfına eklendi. Ve HandshakeJsonFormat nesnesinin dış sınıf HandshakeProtocol sildim. –