拦截升降机休息请求并验证参数

时间:2017-02-11 12:54:11

标签: lift

我希望在处理之前验证LIFT中的REST请求(GET和PUT)。即我需要检查请求是否有参数请求者。如果不需要响应异常说缺少参数。你能告诉我怎么做吗?

1 个答案:

答案 0 :(得分:0)

你可以做一些事情。我试过的两个将是一个帮助函数,它将包含你的Rest调用,如:

def checkParam(r:Req):Boolean = {
  r.param("paramName").isDefined
}

def requireParams[T<:LiftResponse](r:Req)(methodBody: => T):LiftResponse = {
    if(checkParam(r))
      methodBody
    else
      InMemoryResponse("Parameters not specified".getBytes(), List("content-type" -> "text/plain"), Nil, 500)
}

该功能将检查参数,如果不起作用则返回错误,如果有,则执行调用。在您的休息电话中,您可以使用它:

case "location" :: Nil Get req => requireParams(req){
   //your rest body
}

或者,您可以在整个RestHelper上使用guard,假设您要检查每个方法调用,这样的事情可能会有效:

  val ensureParams: PartialFunction[Req, Unit] = {
    case r if (r.get_? || r.put_?) && checkParam(r) =>
    case r if (!r.get_? && !r.put_?) =>
  }

然后用Boot:

保护BootH中的RestHelper实例
 LiftRules.dispatch.append(ensureParams guard YourRestHelper)

我还没有测试过上面的代码,所以可能会出现一些错误 - 但希望它可以帮助你开始。