umgewandelt werden Ich habe dieses Problem seit einiger Zeit, bei denen das Spiel eine "Kann nicht Integer zu lang" Ausnahme aussetzen.Scala/Play ClassCastException: java.lang.Integer kann nicht in java.lang.Long]
play.api.http.HttpErrorHandlerExceptions$$anon$1: Execution exception[[ClassCastException: Cannot cast java.lang.Integer to java.lang.Long]]
Das an der Linie geschieht mit "msgService.processMsg" Aufruf im folgenden Codefragment:
def msgHandler(params: String) = auth.SecuredAction.async { implicit request =>
usersService.findUserByEmail(request.identity.email) flatMap {
case Some(ue) =>
val p = Json.parse(params.toLowerCase())
val op = (p \ "op").get(0).as[JsString].value
val prodId = (p \ "prodid").get(0).as[JsString].value
op match {
case "get-inventory" =>
msgService.processMsg(prodId.toLong, ue) flatMap { case res =>
Future.successful(Redirect(controllers.www.routes.Dashboard.dashboard))
}
case _ =>
Future.successful(Redirect(controllers.www.routes.Dashboard.dashboard))
}
case None =>
Future.successful(Redirect(controllers.www.routes.Dashboard.dashboard))
}
}
...
def amend(inventory: Inventory): Future[Long] = {
db.run(inventorys.withFilter(_.id === inventory.id).update(inventory)).mapTo[Long]
}
def processMsg(prodId: Long, user: UserEntry): Future[Long] = {
findInventoryByProdIdAndUserId(prodId, user.id) flatMap {
case Some(inventory) =>
var updInventory = inventory.copy(status = InventoryStatus.UPDATED)
Logger.debug(s"Updating inventory: ${updInventory}")
amend(updInventory)
case None =>
throw new Exception("No inventory entry found!!")
}
}
Wenn ich die flatMap entfernen und halten Sie es mögen:
msgService.processMsg(prodId.toLong, ue)
dann Ich sehe den Fehler nicht.
Wenn ich Future [Int] anstelle von Future [Inventory] zurückgebe, sehe ich den Fehler nicht.
Ich habe dieses Muster an einigen anderen Stellen im Code verwendet, aber bisher konnte ich nicht isolieren, was dieses Problem verursacht. Wie kann ich diesen Fehler beheben?
Voll Spur Fehler:
! @7416eon6i - Internal server error, for (GET) [/processInviteResponse/%7B%22domain%22:%5B%22invites%22%5D,%22jobId%22:%5B%221%22%5D,%22op%22:%5B%22cand-accept%22%5D%7D] ->
play.api.http.HttpErrorHandlerExceptions$$anon$1: Execution exception[[ClassCastException: Cannot cast java.lang.Integer to java.lang.Long]]
at play.api.http.HttpErrorHandlerExceptions$.throwableToUsefulException(HttpErrorHandler.scala:280)
at play.api.http.DefaultHttpErrorHandler.onServerError(HttpErrorHandler.scala:206)
at play.core.server.netty.PlayRequestHandler$$anonfun$2$$anonfun$apply$1.applyOrElse(PlayRequestHandler.scala:100)
at play.core.server.netty.PlayRequestHandler$$anonfun$2$$anonfun$apply$1.applyOrElse(PlayRequestHandler.scala:99)
at scala.concurrent.Future$$anonfun$recoverWith$1.apply(Future.scala:344)
at scala.concurrent.Future$$anonfun$recoverWith$1.apply(Future.scala:343)
at scala.concurrent.impl.CallbackRunnable.run(Promise.scala:32)
at play.api.libs.iteratee.Execution$trampoline$.execute(Execution.scala:70)
at scala.concurrent.impl.CallbackRunnable.executeWithValue(Promise.scala:40)
at scala.concurrent.impl.Promise$DefaultPromise.tryComplete(Promise.scala:248)
Caused by: java.lang.ClassCastException: Cannot cast java.lang.Integer to java.lang.Long
at java.lang.Class.cast(Class.java:3369)
at scala.concurrent.Future$$anonfun$mapTo$1.apply(Future.scala:405)
at scala.util.Success$$anonfun$map$1.apply(Try.scala:237)
at scala.util.Try$.apply(Try.scala:192)
at scala.util.Success.map(Try.scala:237)
at scala.concurrent.Future$$anonfun$map$1.apply(Future.scala:235)
at scala.concurrent.Future$$anonfun$map$1.apply(Future.scala:235)
at scala.concurrent.impl.CallbackRunnable.run(Promise.scala:32)
at scala.concurrent.BatchingExecutor$Batch$$anonfun$run$1.processBatch$1(BatchingExecutor.scala:63)
at scala.concurrent.BatchingExecutor$Batch$$anonfun$run$1.apply$mcV$sp(BatchingExecutor.scala:78)
2017-05-08 21:27:37,452 [trace] p.c.s.n.PlayRequestHandler - channelReadComplete: ctx = [email protected]
2017-05-08 21:27:37,452 [trace] p.c.s.n.PlayRequestHandler - channelReadComplete: ctx = [email protected]
2017-05-08 21:27:37,452 [trace] p.c.s.n.PlayRequestHandler - channelReadComplete: ctx = [email protected]
2017-05-08 21:27:37,452 [trace] p.c.s.n.PlayRequestHandler - channelReadComplete: ctx = [email protected]
2017-05-08 21:27:37,452 [trace] p.c.s.n.PlayRequestHandler - channelReadComplete: ctx = [email protected]
2017-05-08 21:27:37,453 [trace] p.c.s.n.PlayRequestHandler - channelReadComplete: ctx = [email protected]
Was ist der Typ des Ergebnisses von processMsg, können Sie Code für processMsg bereitstellen? –
@RaKa aktualisiert - danke – srvy