【发布时间】:2019-01-23 00:39:25
【问题描述】:
鉴于此代码
def leaderboardPost(name: Option[String]): Route =
post {
logRequest("leaderboard", Logging.DebugLevel) {
handleRejections(postBodyRejections) {
entity(as[LeaderboardPostRequest]) { leaderboard =>
try {
complete(leaderboardCreate(Some(leaderboard.name), Some(leaderboard.kind)))
} catch {
case cause: DuplicateIDException =>
logger.error(cause)
complete(cause.response)
case cause: UnknownKindException =>
logger.warn(cause)
complete(cause.response)
case cause: Throwable =>
logger.error(cause)
complete(HttpResponse(InternalServerError, entity = s"Exception thrown from LeaderboardPost: ${cause.getMessage}"))
}
}
}
}
}
当leaderboardCreate 抛出UnknownKindException 时,路由代码会捕获它并将其转换为Completing with 500 Internal Server Error response. To change default exception handling behavior, provide a custom ExceptionHandler.
虽然我正在考虑创建一个自定义 ExceptionHandler,但我不明白我为什么需要这样做。我的代码应该捕获它并返回complete(cause.response)。 Akka HTTP 如何在我的代码之前捕获异常?
【问题讨论】: