丢弃Play Framework 2.x上已设置的标头

时间:2013-06-26 12:36:14

标签: scala playframework playframework-2.1

我想“更改”controllers.Assets.at上设置的标头。

  • 我想添加一个自定义代码(我可以按withHeaders Etag执行此操作。
  • 我想删除之前设置的标记。例如.withHeaders

由于discardingCookies附加或覆盖现有标头,我无法使用它删除。对于Cookie,header: ResponseHeader但我无法看到类似的标题。

由于valPlainResult中的def at(file: String): Action[AnyContent] = CacheForever(Assets.at(assetDistDirectory, file)) def CacheForever[A](action: Action[A]): Action[A] = Action(action.parser) { request => action(request) match { case s: SimpleResult[_] => { s.withHeaders( "mycustomheader" -> "is_set_here" ) s.withOutHeaders("Etag","AnotherTagSetByAssetsAtButIDontWant") // <--- I need something like the above line. } case result => result } } ,我无法直接更改其值。

如何在Play Framework 2.x Scala中删除已设置的标记?

我正在尝试做的代码示例:

{{1}}

1 个答案:

答案 0 :(得分:1)

您可以使用withHeaders val without = Seq("Etag","AnotherTagSetByAssetsAtButIDontWant") implicit val writeable: Writeable[A] = s.writeable s.copy(header = s.header.copy(headers = s.header.headers -- without) ) 进行一些修正:

implicit class SimpleResultHelper[A](val r: SimpleResult[A]) extends AnyVal {
  def withOutHeaders(without: String*): SimpleResult[A] = {
    import r.writeable
    r.copy(header = r.header.copy(headers = r.header.headers -- without ))
  }
}

使用隐式类:

val newS = s.withOutHeaders("Etag", "AnotherTagSetByAssetsAtButIDontWant")

用法:

case class

implementationcopy,所有case class中都有方法header

字段ResponseHeader是案例类headers的一个实例,其字段Map[String, String]的类型为{{1}}。