mapResponse
シグネチャ
説明
`` mapResponse``ディレクティブは、内部ルートによって生成されたレスポンスを変換するための:ref:`Custom Directives`のビルディングブロックとして使用されます。 このディレクティブは完全なレスポンスを変換します。
同様のディレクティブは:ref:Response Transforming Directives`を、より特殊化したものは :ref:-mapResponseHeaders-` または mapResponseEntity を参照してください。
例: ステータスのオーバーライド
def overwriteResultStatus(response: HttpResponse): HttpResponse =
response.copy(status = StatusCodes.BadGateway)
val route = mapResponse(overwriteResultStatus)(complete("abc"))
// tests:
Get("/abcdef?ghi=12") ~> route ~> check {
status shouldEqual StatusCodes.BadGateway
}
例:エラー時に空のJSONレスポンスをデフォルトとする
trait ApiRoutes {
protected def system: ActorSystem
private val log = Logging(system, "ApiRoutes")
private val NullJsonEntity = HttpEntity(ContentTypes.`application/json`, "{}")
private def nonSuccessToEmptyJsonEntity(response: HttpResponse): HttpResponse =
response.status match {
case code if code.isSuccess => response
case code =>
log.warning("Dropping response entity since response status code was: {}", code)
response.copy(entity = NullJsonEntity)
}
/** Wrapper for all of our JSON API routes */
def apiRoute(innerRoutes: => Route): Route =
mapResponse(nonSuccessToEmptyJsonEntity)(innerRoutes)
}
val route: Route =
apiRoute {
get {
complete(InternalServerError)
}
}
// tests:
Get("/") ~> route ~> check {
responseAs[String] shouldEqual "{}"
}
Contents