0

我是新手,所以很难弄清楚一些基本的东西。我正在尝试实现的是 api 身份验证。为了实现它,我在 zentask 示例中实现了类似的身份验证操作,例如 Security trait。

但是当我试图在安全特征中访问请求的 json 主体时,我得到编译器错误说;“值 \ 不是类型参数 A 的成员”

这是身份验证操作;

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")
    }

我错过了什么?

4

2 回答 2

0

您可以替换bp: BodyParser[A]parse.json. 由于您只希望请求的主体是 json,因此它应该是固定的主体解析器。否则,json api 将无法确定 request.body 应该是 json。

于 2013-10-24T12:53:43.010 回答
-1

request.body 还不够。您需要做 request.body.asJson 以便chargeJson 是正确的类型。

val chargeJson = request.body val appId:Option[String] = (chargeJson \ "appid").asOpt[String]

于 2013-10-18T20:16:43.223 回答