Akka Http地图响应拒绝被丢弃

时间:2017-11-20 13:23:43

标签: scala akka-http

我目前使用mapResponse进行日志记录操作,并使用setCookie指令执行令牌轮换。但是,当调用拒绝时,它忽略所有先前的mapResponse调用。有没有办法让这件事不发生?

这是一个超级简单的说明性示例,其中删除了设置cookie:

  get{
    setCookie(HttpCookie("Test", "Value")) {
      reject(MalformedRequestContentRejection("Bad content", new Exception("Pants")))
    }
  }

1 个答案:

答案 0 :(得分:1)

因此,关于akka-http的一个令人困惑的事情是,有3种可能的方法可以完成一条路线。 Complete(httpResonse)Reject(rejection)或一个例外。 mapResponse仅在Complete情况下映射。

您可以使用handleRejectionshandleException将拒绝/异常转换为带有响应的完成。

如果不这样做,则框架将使用其默认映射器,该映射器是在所有指令都已完成之后进行的(对于您的mapResponse调用为时已晚)。

mapResponse / handleExceptions的{​​{1}}指令放在之外,以便您将处理Response对象,而不是异常/拒绝原因。 / p>

handleRejections

或者,如果您不担心捕获异常,则可以使用import akka.http.scaladsl.server.Directives._ mapResponse(loggingMethodHere) { handleExceptions(exceptionHandler) { handleRejections(rejectionHandler) { complete("your logic here") } } } 处理mapRouteResultComplete情况。

Rejected