如何在Akka http中设置不区分大小写的参数?

时间:2018-08-27 15:16:30

标签: scala akka-http

例如,我有一条指令:

dispatchEvent

即使要将其编写为DOCSOURCE或DocSource,我也想获得docsource,我该怎么做?

1 个答案:

答案 0 :(得分:1)

没有直接解决方案

我认为直接使用parameters指令是不可能的。 'docsource符号正通过an implicit conversion method in ParameterDirectives转换为NameReceptacle。 NameReceptacle:String中只有1个name成员变量。这样可以防止任何形式的正则表达式匹配或将Symbol转换为多个String以匹配所有可能的大写模式...

间接解决方案

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个不同的值。但是,解决该问题的任何方法都会导致这两个字段发生键冲突。