将Directive1[Option[String]]转换为字符串scala

将Directive1[Option[String]]转换为字符串scala,scala,akka,Scala,Akka,我是斯卡拉的新手。我已经写了几行代码,这些代码给了我cookie。大概是这样的: var dataCookie = optionalCookie("user_session").map(_.map(_.value)); dataCookie是一个Directive1[选项[String]]。我希望它是String。如何从中获取字符串?您好,欢迎使用SO >,让我们详细考虑结果类型:代码> RetriVe1[Posi[Str] ] < /C> >: Directive1-akka http类

我是斯卡拉的新手。我已经写了几行代码,这些代码给了我cookie。大概是这样的:

var dataCookie = optionalCookie("user_session").map(_.map(_.value));

dataCookie
是一个
Directive1[选项[String]]
。我希望它是
String
。如何从中获取字符串?

您好,欢迎使用SO

<> >,让我们详细考虑结果类型:代码> RetriVe1[Posi[Str] ] < /C> >:

  • Directive1
    -akka http类负责传入请求转换或解析传入请求。有关更多详细信息,请参阅:
  • 选项
    -Scala标准库monad描述了可能缺少的值
因此,您不能仅仅以字符串形式检索cookie,您需要处理缺少的cookie值,并将内置指令嵌入到另一个路由中。 请参见下一个代码段示例:

higherRoute ~> optionalCookie("user_session") {
    case Some(session) => 
       println(s"User session: $session") // handle present session cookie value 
    case None => //handle absent session cookie value 
}
其中
higherRoute
只是
Route
的一个示例,您需要在其中附加给定的一段逻辑

有关更多详细信息,请参阅官方文档:


希望这有帮助

所以我可以在Some()中设置任何变量。因为我试过这样做,它不是设置不,你不能-
session
是让我们说val。如果你不想知道如何修改它,你需要声明新的局部变量,比如
val updatedSession=session+“update”
,所以我不能使用var,然后在某个()之外使用该变量不是真的:您可以在
Some(session)=>
中使用
session
您只是不能将它的值重新分配给另一个。如果不需要这样做,请按原样使用,在其他情况下,如果需要更改原始会话,请创建新的
var
val
value@dharmeshsingh对不起,但进一步的讨论超出了这个问题的范围。你最初的问题只是关于可选择的cookie重审。如果你面临其他问题,请提出另一个问题。