我试图使用Activator提供的匿名聊天应用程序用于我自己的目的。我需要根据json字段值触发一个案例。我有这样的代码。
def receive = LoggingReceive {
case js: JsValue => {
(js \ "status").validate[String] map {
Utility.escape(_)
}map {
board ! Message(uid, _)
}
我想将状态字段与字符串值匹配。我试过这种方法
(js \ "status").validate[String] map {
Utility.escape(_)
}toString match {
case "play" =>
board ! Message(uid, "play")
case "stop" =>
board ! Message(uid, "stop")
}
但是我得到了一个java.nio.channels.ClosedChannelException 即时通讯来自Java背景和Scala的新手 任何帮助都会很有帮助
答案 0 :(得分:3)
您与validate[String]
的结果匹配,JsSuccess
或JsError
,所以我会这样做:
(js \ "status").validate[String] match {
case JsSuccess("play", _) => board ! Message(uid, "play")
case JsSuccess("stop", _) => board ! Message(uid, "stop")
case _ => // something else!
}
如果"播放"并且"停止"是你期望通过直接在提取器中绑定命令来简化它的唯一值:
(js \ "status").validate[String] match {
case JsSuccess(cmd, _) => board ! Message(uid, cmd)
}
如果你真的不关心状态的价值,如果它不存在或是别的,那么使用asOpt
代替validate
可能会更容易:
(js \ "status").asOpt[String].map { cmd =>
board ! Message(uid, cmd)
}