Как сделать параметры без учета регистра в Akka http? - PullRequest
0 голосов
/ 27 августа 2018

Например, у меня есть директива:

val sourceTypeDirective: Directive1[DocumentSource] = {
parameters('docsource.as[String]) flatMap {
  case docSource if sourceAcceptedType(docSource) => provide(sourceValueOf(docSource))
  case _                                          => reject
  }
}

Я хочу получить docsource, даже если он будет написан как DOCSOURCE или DocSource, как я могу это сделать?

1 Ответ

0 голосов
/ 28 августа 2018

Нет прямого решения

Я не думаю, что это возможно с директивой parameters напрямую. Символ 'docsource преобразуется в NameReceptacle через метод неявного преобразования в ParameterDirectives. В NameReceptacle есть только 1 String переменная-член: name. Это предотвращает любое совпадение регулярного выражения или преобразование символа в несколько строк, чтобы соответствовать всем возможным шаблонам капитализации ...

Косвенное решение

Директива parameterMap может использоваться для получения Map[String, String], где вы можете затем нажимать клавиши:

val sourceTypeDirective : Directive1[DocumentSource] = 
  parameterMap { 
    (_ : Map[String, String])
      .view
      .map(tup => (tup._1.toLowerCase, tup._2))
      .toMap
      .get("docsource")
      .filter(sourceAcceptedType)
      .map(docSource => provide(sourceValueOf(docSource)))
      .getOrElse(reject)
  }

Внимание

Ключ строки запроса "field" отличается от ключа "FIELD". Это технически 2 разных ключа и должны соответствовать 2 разным значениям. Но любое решение вопроса может привести к столкновению ключей для этих двух полей.

...