静态页面可以作为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欢迎您。我同意这不像“单线”那么简单,但我不明白这是如何实现的。使用实体创建404响应与创建实体的400响应完全相同。模式中有足够的分歧,我不认为图书馆可以提高冗长度。我更新了答案,使其更像是一个util库函数,至少你只需要编写一次... –
糟糕,我删除了我以前的评论(但没有什么重要的东西,只是感谢和抱怨说这不是很简单:)。顺便说一句,你的代码我得到一个编译错误在线staticResponse = ...(期望Seq [HttpHeader],实际HttpEnttity.Chunked) –
@WillIAm回答更新修复编译错误。 –