你们能告诉我为什么提取形式对multipart/form-data
和x-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技能不足以破译它。
答案 0 :(得分:1)
“为int实现默认的unmarshaler”可以这样做:
object JsonImplicits extends DefaultJsonProtocol {
implicit val IntUnmarshaller = Unmarshaller.delegate[String, Int](MediaRanges.`*/*`) { _.toInt }
}
在路线定义之前确定其范围,方法是在import JsonImplicits._
答案 1 :(得分:0)
原来没有Int
的默认解组。所以,如果你实施一个,那一切都有效。
不确定为什么维护者最初没有这样做。