我想回复404 Somethingdifferenthere
,而不仅仅是404 Not Found
。 StatusCode
课程是密封的,所以我不能自己编造。我也不想覆盖所有404的消息,只是在一个特定情况下。这可能吗?
答案 0 :(得分:0)
如果要在本地执行此操作,可以使用简单的complete
指令。例如:
val aRoute = path("notexisting") {
get {
dynamic {
if (System.currentTimeMillis() % 2 == 0) complete(StatusCodes.NotFound, "Not Found")
else complete("OK")
}
}
}
请注意,如果必须在每个请求上构建路由,则必须使用动态。如果你把它放到complete
指令中就可以避免它,如下所示:
val anotherRoute2 = path("notexisting2") {
get {
complete {
if (System.currentTimeMillis() % 2 == 0) HttpResponse(status = StatusCodes.NotFound, entity = "Custom Message")
else HttpResponse(status = StatusCodes.OK, entity = "All Okay")
}
}
}
如果您想全局执行此操作,可以在执行RejectionHandler
时提供自己的runRoute
。它可以作为隐式值传递。
考虑以下代码片段:
class MyActor extends akka.actor.Actor with HttpService {
implicit val rejectionHandler: RejectionHandler = RejectionHandler {
case Nil => complete(StatusCodes.NotFound, "Something Else Here")
} orElse RejectionHandler.Default
def receive = runRoute(myRoute) /*implicit rejection handler is applied here */
def actorRefFactory = context
val myRoute = path("existing") {
get {
respondWithMediaType(MediaTypes.`text/html`) {
complete {
<html>
<body>
<h1>OK</h1>
</body>
</html>
}
}
}
}
}
将应用自定义rejectionHandler
,它会将标准NotFound
请求转换为具有文本"Something Else Here"
的请求。