我想创建一个仅在客户端发送特定Accept
标头时才匹配的路由。我使用Spray 1.2-20130822 。
我想让这条路线运转起来:
def receive = runRoute {
get {
path("") {
accept("application/json") {
complete(...)
}
}
}
}
Here我发现了一个使用accept()
函数的规范,但是我无法弄清楚要在我的Spray-Handler中导入什么来使其作为指令工作。另外,我没有找到关于标头指令的其他文档,而是这些stubs。
答案 0 :(得分:5)
我会这样做:
def acceptOnly(mr: MediaRange*): Directive0 =
extract(_.request.headers).flatMap[HNil] {
case headers if headers.contains(Accept(mr)) ⇒ pass
case _ ⇒ reject(MalformedHeaderRejection("Accept", s"Only the following media types are supported: ${mr.mkString(", ")}"))
} & cancelAllRejections(ofType[MalformedHeaderRejection])
然后将你的根包裹起来:
path("") {
get {
acceptOnly(`application/json`) {
session { creds ⇒
complete(html.page(creds))
}
}
}
}
顺便提一下,如果可以的话,每晚最新喷雾1.2 1.2-20130928
,请更新
答案 1 :(得分:2)
没有名为accept
指令的预定义指令。您可以查看可用指令的完整列表here。
但是,您可以使用headerValueByName
指令制作一个符合您需要的自定义指令:
def accept(required: String) = headerValueByName("Accept").flatMap {
case actual if actual.split(",").contains(required) => pass
case _ => reject(MalformedHeaderRejection("Accept", "Accept must be equal to " + required))
}
将此代码放入喷雾Route
的范围内,然后按照问题中的说明使用。