我是新手和scala,因此很难弄清楚一些基本的东西。我试图实现的是api身份验证。为了实现它,我在zentask示例中实现了类似的安全性特征的auth操作。
但是当我试图在安全特性中访问json主体时,我遇到了编译错误; “value \不是类型参数A”
的成员这是auth行动;
def withApiAuth[A](bp: BodyParser[A])(f: Request[A] => Result): Action[A] = {
Action(bp) { request =>
val chargeJson = request.body
val appId:Option[String] = (chargeJson \ "appid").asOpt[String]
if(appId.isDefined){
Logger.info("Api request" + appId)
f(request)
}
else{
Results.BadRequest("unfortunately")
}
}
}
我在这样的控制器中使用它;
def pay = withApiAuth(parse.json){ request =>
val chargeJson = request.body
println(chargeJson)
Ok("helo")
}
我缺少什么?
答案 0 :(得分:0)
您可以将bp: BodyParser[A]
替换为parse.json
。由于您只希望请求的主体为json,因此它应该是固定的主体解析器。否则,json api肯定不会确定request.body应该是json。
答案 1 :(得分:-1)
request.body还不够。你需要做request.body.asJson,以便chargeJson是正确的类型。
val chargeJson = request.body val appId:Option [String] =(chargeJson \“appid”)。asOpt [String]