如何处理akka http中的多个无效查询参数?

时间:2017-10-19 16:20:41

标签: scala akka akka-http

我的路线中定义了查询参数,如下所示:

parameters(('modifiedDate.as[String].?, 'active.as[Boolean].?)) { (modifiedDate, active) =>

我有以下拒绝处理程序:

RejectionHandler.newBuilder()
      .handle { case MalformedQueryParamRejection(param, _, _) =>
        param match {
          case "modifiedDate" => ...
          case "active" => ...
        }
      }

问题是MalformedQueryParamRejection只匹配第一个错误,所以如果两个查询参数都被传递并且两者都不正确:

some-endpoint?modifiedDate=invalid&active=invalid

只会通知客户第一次错误。

有没有办法使用akka http来通知所有无效的查询参数,例如MalformedQueryParamRejection但报告所有无效查询参数,如MalformedQueryParamsRejection(复数)?< / p>

2 个答案:

答案 0 :(得分:2)

使用handleAll。例如:

RejectionHandler.newBuilder()
  .handleAll[MalformedQueryParamRejection] { paramRejections =>
    // paramRejections is a Seq[MalformedQueryParamRejection]
    val malformedParamNames = paramRejections.map(_.parameterName)
    ...
  }
  ...

答案 1 :(得分:0)

我已经为此提出了一项功能请求:

https://github.com/akka/akka-http/issues/1490