Scala有多个查询参数,但只需要一个

时间:2019-04-17 13:15:28

标签: scala akka akka-http

我必须实现一个GET,其中可以有5种不同的查询参数,但是仅在仅传递一个参数的情况下,该请求才有效。 我是Scala世界的新手。最好的方法是什么?

当前我正在使用parameterMap,但我愿意接受建议。

pathPrefix("cars") {
  pathSingleSlash {
    complete("/engines")
  }
  get {
    parameterMap { params =>
      if (params.size != 1) {
        complete(StatusCodes.BadRequest)
      } else {

        params.foreach{
          case ("asd", value ) //doSomething
          case _ => complete(StatusCodes.BadRequest)

        }
     }
  }
}

这不是当前有效的方法,因为:

 Error:(39, 27) type mismatch;
 found   : Unit
 required: akka.http.scaladsl.server.RequestContext => scala.concurrent.Future[akka.http.scaladsl.server.RouteResult]
            params.foreach{

我可以在最后添加一个完整的字母来解决它,但这不是解决方案。 有什么建议吗?

有效请求

/app/cars/engines?capacity=1000
/app/cars/engines?type=benzin

无效请求

/app/cars/engines?type=benzin&capacity=1000

1 个答案:

答案 0 :(得分:2)

尽管存在“类型不匹配”错误,但是您的总体方法还不错。导致该错误的原因是使用foreach,它返回了Unit。解决该错误的一种方法是在检查head的大小是否为一个后检查Map的{​​{1}}:

Map