0

你们能告诉我为什么以下提取形式适用于multipart/form-datax-www-form-urlencoded请求吗

formFields("firstName"?, "age2"?, "sex", "vip"?) {
  (firstName : Option[String], age2, sex, vip) =>
    complete(firstName + "." + age2 + "." + sex + "." + vip)
}

但是这个看似相同的代码版本

formFields('firstName :: ("age2".as[Int]) :: ('sex?) :: ("VIP" ? false) :: HNil) {
  (firstName : String, age2 : Int, sex : Option[String], vip : Boolean) =>
    complete(firstName + "." + age2 + "." + sex + "." + vip)
}

multipart/form-data对请求进行编码时不起作用。

服务器返回以下错误:

There was a problem with the requests Content-Type:
Field 'age2' can only be read from 'application/x-www-form-urlencoded' form content

我看到了一个调用堆栈,spray.httpx.unmarshalling.FormField.fail但我的 Scala 技能不足以破译它。

4

2 回答 2

1

“为 int 实现默认解组器”可以这样完成:

object JsonImplicits extends DefaultJsonProtocol {
    implicit val IntUnmarshaller = Unmarshaller.delegate[String, Int](MediaRanges.`*/*`) { _.toInt }
}

并通过在之前添加导入来确保它在您的路由定义之前的范围内:import JsonImplicits._

于 2014-01-21T08:50:23.600 回答
0

原来没有默认的解组器Int。因此,如果您实施一个,一切都会奏效。

不知道为什么它不是由维护人员首先完成的。

于 2013-05-14T07:15:38.227 回答