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

问题描述 投票:0回答:1

我必须实现一个GET,我可以有5个不同的查询参数,但只有传递一个参数时,请求才有效。我是Scala世界的新手。什么是最好的方法?

目前我使用的是参数映射,但我愿意接受建议。

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
scala akka akka-http
1个回答
2
投票

尽管存在“类型不匹配”错误,但您的整体方法仍然很好。造成这种错误的原因是使用foreach,它返回一个Unit。修复错误的一种方法是在检查head的大小为1之后检查MapMap

get {
  parameterMap { params =>
    if (params.size != 1) {
      complete(StatusCodes.BadRequest)
    } else {
      params.head match {
        case ("asd", value) =>
          // do something
          complete(StatusCodes.OK)
        case _ =>
          complete(StatusCodes.BadRequest)
      }
    }
  }
}
© www.soinside.com 2019 - 2024. All rights reserved.