我有以下val someList = List(Server: Apache-Coyote/1.1, Set-Cookie:
JSESSIONID=879sdf97f98s7f9a87dgssa7987; Path=/userApi/; HttpOnly)
:
879sdf97f98s7f9a87dgssa7987
现在我想从上面的列表中获取someList.iterator.filter(_.name.equals("Set-Cookie")).map { x => x.value }
。所以我做了以下事情:
allprojects {
repositories {
jcenter()
maven {
url = "https://repository-achartengine.forge.cloudbees.com/snapshot/"
}
}
}
但这不会从列表中提供该特定值。
答案 0 :(得分:1)
import spray.http.HttpHeaders.`Set-Cookie`
val sessionId: Option[String] = someList.collectFirst {
case h: `Set-Cookie` if h.cookie.name == "JSESSIONID" => h.cookie.content
}
现在只需妥善处理Option[String]
。
.collectFirst
的作用类似于.filter
,.map
和.find
。
首先,它按类型Set-Cookie
过滤标头。
其次,因为此时HttpHeader
已经转换为Set-Cookie
,我们可以访问其.cookie
属性并在我们的搜索谓词中使用它。
第三,我们要求找到名为JSESSIONID
的cookie并获取其值。
答案 1 :(得分:0)
我让它工作的唯一方法如下(虽然我不喜欢使用拆分,所以直到找到任何优雅的方式):
val sessionId = someList.filter(_.name.equals("Set-Cookie")).
map { x => x.value.split(";")(0).split("=")(1)}.headOption
println("sessionId: "+sessionId.get)