【发布时间】:2015-10-07 10:00:33
【问题描述】:
我在 Scala 中使用带有 Play Framework 的 Web 套接字。我想在我的项目中使用Try/Catch 功能来捕获一些Exceptions,例如Server Exception、Network Exception 等。
我做了什么:
WebSocketController.scala
object LoginWS {
def props(out: ActorRef) = Props(new LoginWS(out))
}
class LoginWS(out: ActorRef) extends Actor {
def receive = {
case json_req: JsObject =>
var user_name = (json_req \ "user_name").as[String]
var password = (json_req \ "password").as[String]
var source = (json_req \ "source_type").as[String]
var result = UserLogin.authenticateUser(user_name, password).isDefined
var userID: Int = 0;
if(result) {
userID = UserLogin.getUserRole(user_name, password)
val login_status : String = "Success"
out ! Json.toJson(JsObject(Seq("login_status" -> JsString(login_status), "user_id" -> JsNumber(userID))))
}
else {
val login_status : String = "Failure"
out ! Json.toJson(JsObject(Seq("login_status" -> JsString(login_status), "user_id" -> JsNumber(userID))))
}
}
}
object WebSocketController extends Controller {
def login = WebSocket.acceptWithActor[JsValue, JsValue] { request =>
out => LoginWS.props(out)
}
}
我尝试了什么:
我使用了this answer posted by Ende Neu,但它显示not found: value APIAction。注意:我也在 routes 文件中添加了 APIAction
代码:
class LoginWS(out: ActorRef) extends Actor {
def receive = APIAction { request
case json_req: JsObject =>
.....
....//code here
}
}
object WebSocketController extends Controller {
def login = WebSocket.acceptWithActor[JsValue, JsValue] { request =>
out => LoginWS.props(out)
}
def APIAction(f: Request[AnyContent] => Result): Action[AnyContent] =
Action { request =>
Try(f(request))
.getOrElse(
InternalServerError(Json.obj("code" -> "500", "message" -> "Server error"))
)
}
}
请帮助我在Web socket 中实现 Try/Catch 功能
【问题讨论】:
-
动作在控制器内部使用,而不是演员,演员只会处理消息,接收必须是部分函数,而不是动作
-
那么我该如何处理
erroroperationsin Actionlogin正如你所说的
标签: scala playframework websocket try-catch playframework-2.3