scala - 如何匹配路由中的特定接受 header ?

标签 scala spray

我想创建一个仅在客户端发送特定 Accept 时才匹配的路由标题。我用喷雾 1.2-20130822 .

我想让路线工作:

def receive = runRoute {
    get {
      path("") {
        accept("application/json") {
           complete(...)
        }
      }
    }
  }

Here我找到了一个使用 accept() 的规范函数,但我无法弄清楚在我的 Spray-Handler 中导入什么以使其作为指令工作。另外,我没有找到关于 header 指令的其他文档,但这些 stubs .

最佳答案

我会这样做:

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如果可以,更新它

关于scala - 如何匹配路由中的特定接受 header ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19131488/

相关文章:

scala - 使用 case 类的伴随对象作为类型参数时编译错误

java - 如何在 Play 框架中的 Action 中获取调用的 Action 的响应

scala - 元组函数输出

scala - Scala 中的 self 类型不匹配

scala - 我可以为特定管道请求设置超时和重试次数吗?

java - 使用 Spray Akka 超线程的 Scala 服务器

json - 在 Spray 1.2.0 路由中将查询字符串参数与 JSON 实体相结合

scala - Sqs Akka Stream 内存不足

java - java.util.GregorianCalendar 在 1976 年 3 月 28 日到 3 月 29 日之间发生了什么?

scala - 升级到1.2版本后,将Marshaller的 future 未纳入隐含范围