我目前使用mapResponse进行日志记录操作,并使用setCookie指令执行令牌轮换。但是,当调用拒绝时,它忽略所有先前的mapResponse调用。有没有办法让这件事不发生?
这是一个超级简单的说明性示例,其中删除了设置cookie:
get{
setCookie(HttpCookie("Test", "Value")) {
reject(MalformedRequestContentRejection("Bad content", new Exception("Pants")))
}
}
答案 0 :(得分:1)
因此,关于akka-http的一个令人困惑的事情是,有3种可能的方法可以完成一条路线。 Complete(httpResonse)
,Reject(rejection)
或一个例外。 mapResponse
仅在Complete
情况下映射。
您可以使用handleRejections
或handleException
将拒绝/异常转换为带有响应的完成。
如果不这样做,则框架将使用其默认映射器,该映射器是在所有指令都已完成之后进行的(对于您的mapResponse
调用为时已晚)。
将mapResponse
/ handleExceptions
的{{1}}指令放在之外,以便您将处理Response对象,而不是异常/拒绝原因。 / p>
handleRejections
或者,如果您不担心捕获异常,则可以使用import akka.http.scaladsl.server.Directives._
mapResponse(loggingMethodHere) {
handleExceptions(exceptionHandler) {
handleRejections(rejectionHandler) {
complete("your logic here")
}
}
}
处理mapRouteResult
和Complete
情况。
Rejected