Scala 如何在Akka http中生成不区分大小写的参数?

Scala 如何在Akka http中生成不区分大小写的参数?,scala,akka-http,Scala,Akka Http,例如,我有一个指令: val sourceTypeDirective: Directive1[DocumentSource] = { parameters('docsource.as[String]) flatMap { case docSource if sourceAcceptedType(docSource) => provide(sourceValueOf(docSource)) case _

例如,我有一个指令:

val sourceTypeDirective: Directive1[DocumentSource] = {
parameters('docsource.as[String]) flatMap {
  case docSource if sourceAcceptedType(docSource) => provide(sourceValueOf(docSource))
  case _                                          => reject
  }
}
我想得到docsource,即使它将被写为docsource或docsource,我如何才能做到这一点

无直接解决方案

我认为直接使用parameters指令是不可能的。“docsource”符号正在通过转换为名称插座。NameReceptor:name中只有1个字符串成员变量。这将防止任何形式的正则表达式匹配或将符号转换为多个字符串以匹配所有可能的大小写模式

间接溶液

该指令可用于获取映射[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)
  }
警告

查询字符串键字段与键字段不同。从技术上讲,这是两个不同的键,应该对应于两个不同的值。但这个问题的任何解决方案都将导致这两个领域的关键冲突