我正在从代码喷雾(版本:1.3.4
)迁移到akka-http(版本:10.0.13
)。
我们有一个现有客户,他们像Content-Type
一样发送application/vnd.awesome.value; mykey="custom/custom"
以下代码在spray
中工作正常,但在akka-http
中的参数(mykey
)被剥离了
request.header[`Content-Type`].map { header =>
// HERE PARAMS IS EMPTY MAP
val myKeyValue = header.contentType.mediaType.params.get("mykey").map(_.replace("\"", ""))
myKeyValue.flatMap(_.toMediaType).getOrElse(header.contentType.mediaType)
}.getOrElse(defaultMediaType)
StringToMediaTypeConversion.scala
val customMediaTypes: List[MediaType] = ???
implicit class StringToMediaType(private val str: String) extends AnyVal {
private def parseMediaType(input: String): Option[MediaType] = MediaType.parse(input).fold(_ => None, Some(_))
private def isSupportedType(mediaType: MediaType): Boolean = customMediaTypes.contains(mediaType)
private def extractMediaTypeParamIfExists(mediaType: MediaType): Option[MediaType] = mediaType.params.get("mykey") match {
case Some(value) => parseMediaType(value)
case None => Some(mediaType)
}
def toMediaType: Option[MediaType] = parseMediaType(str).flatMap(extractMediaTypeParamIfExists).filter(isSupportedType)
}
以下单元测试正在通过
val customMediaType: Option[MediaType] = """application/vnd.awesome.value; mykey="custom/custom""""".toMediaType
customMediaType should not be None
customMediaType.get.mainType shouldBe "custom"
customMediaType.get.subType shouldBe "custom"
感谢您的帮助。
如何提取原始价值?或如何提取媒体类型的参数值?