我想“更改”controllers.Assets.at
上设置的标头。
withHeaders
Etag
执行此操作。.withHeaders
由于discardingCookies
附加或覆盖现有标头,我无法使用它删除。对于Cookie,header: ResponseHeader
但我无法看到类似的标题。
由于val
是PlainResult
中的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}}
答案 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
implementation是copy
,所有case class
中都有方法header
。
字段ResponseHeader
是案例类headers
的一个实例,其字段Map[String, String]
的类型为{{1}}。