Ben bu rota: Bu güzel çalışıyorPOST paramları ve JSON gövdesini tek bir rotada nasıl gizler?
val routes =
pathPrefix("api") {
path("ElevationService"/DoubleNumber/DoubleNumber) { (long, lat) =>
post {
requestContext =>
println(long, lat)
}
}
}
, Arayabileceğim benim ElevationService
olarak:
http://localhost:8080/api/ElevationService/39/80
Sorun da istek olarak bana gönderilen vücudu ayrıştırmak istiyor vardır JSON.
path("test") {
import scrive.actors.ScriveJsonProtocol
import spray.httpx.SprayJsonSupport._
post {
entity(as[ScriveRequest]) { scrive =>
complete(scrive)
}
}
}
Ama birine bu iki güzergah birleştirmek nasıl bilmiyorum:
{
"first": "test",
"second": 0.50
}
Ben the documentation on the entity directive aşağıdaki ayrı rotada işe gitmek için idare ettik: Aşağıdaki gibi görülür. İşlevlere sarıldıkları için, long
, lat
paragraflarını entity
işlevinden arayamıyorum, bu kapsamda mevcut değiller. Aynı gider ya da başka bir şekilde.
Bir hizmet tüm verileri geçirerek çağrı sonra benim params ve benim POST gövdesini hem erişebilir ve muktedir istiyorum:
val elevationService = actorRefFactory.actorOf(Props(new ElevationService(requestContext)))
elevationService ! ElevationService.Process(long, lat, bodyParams)
Teşekkür ederim, ben vereceğim Bir deneme, ama "Eksik parametre türü: actorReply" aldım, açıkçası herhangi bir yerde tanımlanmadığı için. Bu aktör için bir "actorReply" türünde bir geri çağrı mı, yoksa ne için? Aptalca bir soru sorduğumda özür dilerim, sadece sprey ile başlıyorum ve bu dsl yönlendirmesi çok kafa karıştırıcı. –
'actorReply', aktörün yanıtının adı olarak kullandım. Akka'nın aldatılmamış olduğunu unutmuşum, muhtemelen bir oyuncuya ihtiyaç duyacaktır. Eğer aktörden bir cevap beklemeniz gerekmiyorsa, o zaman “?” Veya “onSuccess” a ihtiyacınız olmaz, sadece oyuncuya bir “fire-and-forget” mesajı göndermek için '' 'kullanabilirsiniz. Orada bırakın. – lmm