2017-10-20 10 views
1

私のAPIの完全な機能の結果を検証したい場合、レスポンスはStringをJson型に変換できないときにnullを生成し、nullを生成したくありませんしかし、言う:「が見つかりません」、これが私のルートである:それは常にそれがBDでの値とヌルいないときを取得するときにJSON応答、状態の中、他に入るので、検証する方法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)) 
      } 
      } 
     } 
     } 
    } 

これは、動作しません。

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ライブラリ'states'値もどこからも出てきません。また、なぜ 'signIn'を何度も呼びますか? – acjay

答えて

0

私はを通じて物事を考えることを停止し、どのように私は必要なものを解決するために、それが有効な応答は、サインインの応答を分析することであったことを検証するために最初:

  • ヴァル

    への応答を割り当てます
    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) 
     } 
     } 
    } 
関連する問題