HttpResponse
のentity
として静的ページを返すことができます。あなたはあなたが障害の発生時に静的なページを使用したいと思うでしょうフォーム
def someFunctionThatCanFail() : Try[HttpResponse] = ???
のいくつかの機能を持っていると仮定すると
。あなたは最初の静的なページに基づいていますSource
を作成する必要があります:
import akka.stream.scaladsl._
import akka.http.scaladsl.model.HttpEntity.Chunked
def createStaticSource(fileName : String) =
FileIO
.fromPath(Paths get fileName)
.map(ChunkStreamPart.apply)
def createChunkedSource(fileName : String) =
Chunked(ContentTypes.`text/html(UTF-8)`, createStaticSource(fileName))
このソースは、レスポンスの内側に配置することができます。
def staticResponse =
HttpResponse(status = StatusCodes.NotFound,
entity = createChunkedSource("resources/www/404.html"))
唯一のことはやって左にあります有効か失敗した場合の静的応答した場合、関数の結果を返し、次のいずれかラモンの優れた答えに展開する
val route =
get {
complete(someFunctionThatCanFail() getOrElse staticResponse)
}
@willIAmよろしくお願いいたします。私はそれが "1ライナー"ほどシンプルではないことに同意しますが、それがどうなるかはわかりません。エンティティを使用して404レスポンスを作成することは、エンティティを使用して400レスポンスを作成することとまったく同じです。パターンに十分な相違があるので、図書館が冗長性を大幅に向上させるとは思えません。私はutilライブラリ関数のようにするための答えを更新しました。少なくとも、一度だけ書く必要があります... –
私は誤って以前のコメントを削除しました(ただし、重要なことはありませんでした。それは非常に簡単ではないと不平を言った:)。ところで、あなたのコードでは、staticResponse = ...(期待されるSeq [HttpHeader]、実際のHttpEnttity.Chunked)のコンパイルエラーが発生します。 –
@WillIAm答えが更新され、コンパイルエラーが修正されました。 –