【发布时间】:2015-05-08 10:10:14
【问题描述】:
这是我的路线:
pathPrefix("event" / Segment / "user") { id =>
pathEnd {
put {
dbService.addParticipant(id, user)
complete("OK")
} ~
delete {
dbService.removeParticipant(id, user)
complete("OK")
}
}
} ~
当向http://localhost:9999/event/860852c4-768f-430e-9a9d-d1d35e86ede2/user 发送 PUT 或 DELETE 请求时,两个方法指令都被执行 - 我的意思是 dbService.addParticipant(id, user) 和 dbService.removeParticipant(id, user) 被调用。谁能解释一下问题出在哪里?
我看不出这与 official spray example 有何不同:
// extract URI path element as Int
pathPrefix("order" / IntNumber) { orderId =>
pathEnd {
// method tunneling via query param
(put | parameter('method ! "put")) {
// form extraction from multipart or www-url-encoded forms
formFields('email, 'total.as[Money]).as(Order) { order =>
complete {
// complete with serialized Future result
(myDbActor ? Update(order)).mapTo[TransactionResult]
}
}
} ~
get {
// JSONP support
jsonpWithParameter("callback") {
// use in-scope marshaller to create completer function
produce(instanceOf[Order]) { completer => ctx =>
processOrderRequest(orderId, completer)
}
}
}
}
【问题讨论】:
-
complete {}中的内容针对每个请求运行。见spray.io/documentation/1.2.2/spray-routing/advanced-topics/…。由于这是喷雾中被问到最多的一个问题,您会在喷雾邮件列表中找到很多关于它的信息,例如在这个线程中:groups.google.com/forum/#!searchin/spray-user/confusion/…