我正在處理一個我希望成爲非阻塞的端點。此端點的目的非常簡單,即向Mongo商店寫入文檔。我在Play 2.5.x應用中使用官方MongoDB Scala Driver。斯卡拉 - 如何使用期貨發送異常情況下的失敗響應
我的理解是,MongoDB支持期貨使用toFuture()
方法。 Source
問題是我的控制器中的處理方法期望解析爲類型Future[Result]
。但是,onComplete
回調(或其他回調函數)僅返回類型Unit
,導致編譯錯誤。是否有任何替代模式正在用於這些情況?我有什麼選擇?
注意 - 我知道Play會在沒有寫入並自動拋出500的情況下捕捉到異常。但在這種情況下,我想處理它手動
class WriteController extends Controller {
def writeSingleEvent = Action.async { implicit request =>
val mongo = mongoService.getMongoClient() // my mongoservice
val database_name: String = request.getQueryString("database").getOrElse("")
val collection_name: String = request.getQueryString("collection").getOrElse("")
if (database_name == "" || collection_name == "") {
Future(BadRequest("Must specify database and collection names"))
} else {
val database = mongo.getDatabase(database_name)
val collection = database.getCollection(collection_name)
val body = request.body.asJson.get.toString
val bsondocument = BsonDocument.apply(body)
val document = Document(bsondocument)
val insertFuture = collection.insertOne(document).toFuture()
insertFuture.onComplete {
case Success(_) => Future(Ok("Inserted"))
case Failure(_) => Future(InternalServerError)
}
}
}
結果出現兩個錯誤。首先輸入「InternalServerError」不匹配,表示Throwable類型是必需的。此外,整體功能應該返回類型'FutureResult]'而不是'單元' – satnam