Акка http путь поиска - PullRequest
0 голосов
/ 18 марта 2020

У меня есть случай, когда я хочу проверить что-то только для определенного маршрута, т.е. завершить с "_xxx". Но если я сделаю так, как показано ниже, то pathSuffix извлечет путь и оставит суффикс без совпадения суффикса в объекте маршрута и, следовательно, не сможет использоваться вызывающей стороной этой функции, так как объект маршрута изменен.

def apply(route: Route): Route =
    pathSuffix("_xxx") {
      extractRequest { request =>
          entity(as[SomeObject]) { content =>
            if (content.records.size > limit)
              complete(
                StatusCodes.BadRequest -> "msg"
              )
            else
              route // talking about this.
          }
      }
    }

Могу ли я иметь способ выполнить этот фрагмент кода только для тех путей URI, которые заканчиваются на "_xxx", и если условие не удовлетворяет, вернуть исходный маршрут, чтобы его можно было использовать дальше !!

Ответы [ 2 ]

0 голосов
/ 18 марта 2020
def apply(route: Route): Route =
    extractRequest {
      case HttpRequest(POST, Uri.Path("dsd/_xxx"), _, _, _) =>
        entity(as[SomeObject]) { content =>
          if (content.records.size > limit)
            complete(
              StatusCodes.BadRequest -> "msg"
            )
          else
            route
        }
      case _ => route
    }
0 голосов
/ 18 марта 2020

Вы можете применить сопоставление с шаблоном как:

object routeSuffix {
   def unapply(arg: String): Boolean = arg.endsWith("_xxx")
}

if (content.records.size > limit)
   complete(
      StatusCodes.BadRequest -> "msg"
   )
else {
  route match {
    case routeSuffix() => // what you want to do 
    case _ => // default case, do nothing or anything else
  }
}
...