拦截电梯休息请求并验证参数

intercept lift rest request and verify parameters

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

您可以做一些事情。我会尝试的两个是一个辅助函数,它可以包装你的 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)
}

该函数将检查参数,return如果不起作用则报错,如果起作用则执行调用。在您的休息电话中,您可以像这样使用它:

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 中保护你的 RestHelper 实例:

 LiftRules.dispatch.append(ensureParams guard YourRestHelper)

我没有测试过上面的代码,所以可能有一些错误 - 但希望它能帮助你入门。