如何在安全特性中使用json body解析器

时间:2013-10-18 10:37:30

标签: json scala playframework-2.2

我是新手和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")
    }

我缺少什么?

2 个答案:

答案 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]