2017-10-20 170 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) 
     } 
     } 
    }