我迄今爲止的嘗試遇到java.lang.ClassCastException: scala.runtime.BoxedUnit cannot be cast to scala.Option
。事實上,我甚至無法思考如何做出適當的迴應。可能嗎?我可以在噴霧中返回Future [Option [Foo]]嗎?
回答
這裏可能有兩個選擇:要麼它在你的程序中的錯誤,或者你沒有提供任何噴灑方式馬歇爾你Foo
類型,導致Future
和Option
默認處理。現在,如果你犯了一個GET請求上/測試,你會得到一個正確的響應
val route = {
(get & path("test")) {
complete {
Future(Option("Hello Spray!"))
}
}
}
:E.g這條線路可以通過標準噴霧marshallers沒有任何問題的處理。
如果您有特定的類型,那麼您需要爲您提供ToResponseMarshallable
類型的編組,以通過隱式上下文來篩選。我認爲最常見和最簡單的方法是使一個JSON響應,爲此,你需要噴霧JSON(或其他一些支持JSON LIB),只是提供了一個轉換器,JSON,如:
import spray.json.DefaultJsonProtocol._
case class Boy(name: String, age: String)
object Boy {
implicit val boyJson = jsonFormat2(Boy.apply)
}
現在剩下的唯一要做的就是將一個json編組放入範圍:
import spray.httpx.SprayJsonSupport._ // import json marshaller
val route = {
(get & path("test") {
complete {
Future(Option(Boy("Name", 0)))
}
}
}
現在您將得到一個json響應。如果您需要其他類型的迴應,請爲Boy類型製作自定義編組器。
非常清楚的解釋! +1 –
@ 4lex1v在此類型不匹配中複製並粘貼您的示例結果:'expected:ToResponseMarshallable,actual:Future [Option [TestRoute.this.Boy]]'。 TestRoute是「路由」存在的特徵。自2014年起,需求變更了嗎? – ecoe
總之 - 是的,但你需要讓編譯器高興。
Spray讓你可以返回Future
或簡單的迴應,只要它可以編組回來的迴應。您需要確保在爲您進行編組的範圍內進行隱式轉換,或者明確地轉換您的對象。
以下是響應變換的執行方式:http://spray.io/documentation/1.2.0/spray-httpx/response-transformation/。
對於仍然有問題的人在完整的塊中返回未來,請確保在範圍內具有執行上下文,如scala.concurrent.ExecutionContext.Implicits.global
! IDE往往不明白這是問題,可能會讓你失望。
- 1. 噴霧可以NoClassDefFoundError的
- 2. Java - 丟棄Future返回值可以嗎?
- 3. 我可以在Future中使用ProcessPoolExecutor嗎?
- 4. 有沒有辦法使用噴霧噴霧罐和噴霧罐?
- 5. 噴霧:編組UUID以JSON
- 6. 路徑在噴霧
- 7. Future何時可以返回未從Future中拋出的Exception?
- 8. 與噴霧JSON
- 9. 噴霧路由
- 10. Scala Future with Option()
- 11. 噴霧路由404響應
- 12. 這個java蚊子不斷咬我 - NoClassDefFoundError。噴霧!噴霧!噴霧! ..什麼也沒有發生
- 13. 噴霧 - IllegalURI異常
- 14. 噴霧編組cats.data.Xor
- 15. 解析HTML噴霧
- 16. 噴霧的`detach`指令
- 17. 將Future [MyType]轉換爲Future [Option [MyType]]
- 18. 爲什麼噴霧劑會作爲響應體返回?
- 19. 定製噴霧格式化[A]
- 20. 返回Future的方法的錯誤[Option [BasicProfile]]
- 21. 在噴霧中如何解開plain/text?
- 22. 在噴霧路線中鏈接Akka Actor
- 23. 噴霧,阿卡和actorSelection
- 24. 噴霧1.2忽略響應
- 25. 噴霧JSON失敗的Eithers
- 26. 噴霧HTTP POST請求
- 27. 映射噴霧參數
- 28. 我可以在jquery中的Option Value中獲得2值嗎?
- 29. CompleteWith指令在噴霧路由
- 30. 我們可以在MySQL中將表名稱作爲「option」嗎?
你能展示你得到BoxedUnit異常的代碼嗎?看起來你沒有回到你應該返回選項值的地方。 – jrudolph