Я пытаюсь сосчитать отклонения, которые были возвращены RejectionHandler. Я думаю, способ, которым я делаю это сейчас, не самый лучший или даже неправильный. Я просто пытаюсь вызвать инкрементный метод в моей базе данных, в каждом из обработанных случаев.
implicit def rejectionHandler: RejectionHandler =
RejectionHandler.newBuilder()
.handle {
case MissingCookieRejection(cookieName) =>
requestInfoEntry.incrementRjectedNum
complete(HttpResponse(BadRequest, entity = "No cookies, no service!!!"))
}
.handle {
case AuthorizationFailedRejection =>
requestInfoEntry.incrementRjectedNum
complete((Forbidden, "You're out of your depth!"))
}
.handle {
case ValidationRejection(msg, _) =>
requestInfoEntry.incrementRjectedNum
complete((InternalServerError, "That wasn't valid! " + msg))
}
.handleAll[MethodRejection] { methodRejections =>
requestInfoEntry.incrementRjectedNum//todo sideeffect ??
val names = methodRejections.map(_.supported.name)
complete((MethodNotAllowed, s"Can't do that! Supported: ${names mkString " or "}!"))
}
.handleNotFound {
requestInfoEntry.incrementRjectedNum
complete((NotFound, "Not here bldghad!"))
}
.result()
Пока я "посещаю мою страницу, которая не найдена", Akka HTTP возвращает мне правильный ответ: "Not here bldghad !» каждый раз, когда я обновляю браузер sh на несуществующей веб-странице. Но когда я проверяю свою базу данных, я вижу только один шаг. Могу ли я сделать так, как я делаю вообще? (Мне тоже нужно считать успехи)
PS Возможно, мне нужно работать с кодами состояния и не использовать побочные эффекты. Но какое лучшее место, где я могу это сделать? У меня много контроллеров, и я не хочу перехватывать это на каждом контроллере)
Могу ли я где-нибудь перехватить ответы?