2017-10-20 102 views
1

我想驗證我的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

一些幫助?謝謝。

+0

這是一個非常困難的問題,不知道signIn'的'簽名來回答以及您正在使用的JSON庫。這個'國家'的價值也來自無處不在。另外,你爲什麼多次調用'signIn'? – acjay

回答

0

我停下過思考的東西,怎麼解決,我需要什麼,首先要驗證這是一個有效的響應是分析簽到的響應:

  • 分配到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) 
     } 
     } 
    }