Scala несколько параметров запроса, но требуется ровно один - PullRequest
0 голосов
/ 17 апреля 2019

Мне нужно реализовать 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{

Iможно решить, добавив полный в конце, но это не решение.Есть предложения?

Допустимые запросы

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

Недопустимый запрос

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

1 Ответ

2 голосов
/ 17 апреля 2019

Ваш общий подход в порядке, несмотря на ошибку "несоответствие типов". Причиной этой ошибки является использование foreach, которое возвращает Unit. Чтобы исправить ошибку, проверьте head из Map после проверки, что размер Map равен единице:

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)
      }
    }
  }
}
...