如何在AKKA-HTTP中验证完成
问题描述:
我想验证我的API的完整功能的结果,当它无法将字符串转换为Json类型时,Response会生成一个null,我不希望它生成null但说:“没有发现”,这是我的路线:如何在AKKA-HTTP中验证完成
val route = pathPrefix("auth") {
path("signIn") {
pathEndOrSingleSlash {
post {
entity(as[LoginPassword]) { loginPassword =>
val a = signIn(loginPassword.login, loginPassword.password).map(_.asJson)
if(signIn(loginPassword.login, loginPassword.password).map(_.asJson) == null){
complete(states.map(_.asJson))
}else {
def getObject : Option[Any] = Option(signIn(loginPassword.login, loginPassword.password).map(_.asJson))
val ahh = signIn(loginPassword.login, loginPassword.password).map(_.asJson)
if(getObject.isEmpty || getObject == null){ ///////NOT FOUND
complete("Not Found")
}else {
complete(signIn(loginPassword.login, loginPassword.password).map(_.asJson)
}
//complete(signIn(loginPassword.login, loginPassword.password).map(_.asJson))
}
}
}
}
}
这是不行的,因为它总是进入其他的条件中,响应一个JSON时,得到的BD和当值null不会。
功能登录
def signIn(login: String, password: String): Future[Option[TokenEntity]] = {
db.run(users.filter(u => u.username === login).result).flatMap { users =>
users.find(user => Bcrypt.validate(password, user.password)) match {
case Some(user) => db.run(tokens.filter(_.userId === user.id).result.headOption).flatMap {
case Some(token) => Future.successful(Some(token))
case None => createToken(user).map(token => Some(token))
}
case None => Future.successful(None)
}
}
}
我使用JSON库是:Json
一些帮助?谢谢。
答
我停下过思考的东西,怎么解决,我需要什么,首先要验证这是一个有效的响应是分析签到的响应:
-
分配到VAL响应
val token = signIn(loginPassword.login, loginPassword.password)
令牌类型:未来[选项[TokenEntity]和我需要的工作:选项[TokenEntity]并验证它是否是一个正确的答案:
val response = token.map(_ match {
case Some(token) => prepareHttpResponse(StatusCodes.OK, token.asJson.toString)
case None => prepareHttpResponse(StatusCodes.Unauthorized, "{reason: \"not found\"")
})
,如果它是有效的在我的Json格式的令牌回应,但回应我用:未发现 总算是:
val route = pathPrefix("auth") {
path("signIn") {
post {
entity(as[LoginPassword]) { loginPassword =>
val token = signIn(loginPassword.login, loginPassword.password)
val response = token.map(_ match {
case Some(token) => prepareHttpResponse(StatusCodes.OK, token.asJson.toString)
case None => prepareHttpResponse(StatusCodes.Unauthorized, "{reason: \"not found\"")
})
complete(response)
}
}
}
这是一个非常困难的问题,不知道signIn'的'签名来回答以及您正在使用的JSON库。这个'国家'的价值也来自无处不在。另外,你为什么多次调用'signIn'? – acjay