对于 url 编码的 POST 的参数,您将如何实现 String 到 json 对象解组器?我正在使用 1.2 版。
这就是我想要的。Foursquare 将 url 编码的 POST 推送到我的服务。我的路线看起来像这样
path("handle_4sq_push") {
formFields("checkin".as[FsqCheckin], "user".as[String], "secret".as[String]) {
(checkin, user, secret) =>
complete {
StatusCodes.OK
}
}
}
我有 json 解析器,FsqCheckin
它的定义如下
implicit val fsqCheckinFormat = jsonFormat(FsqCheckin.apply, "id", "createdAt", "timeZoneOffset", "user", "venue")
所以这一切都很好,但它只有在参数被表单编码时才有效。否则喷雾说
There was a problem with the requests Content-Type:
Field 'checkin' can only be read from 'multipart/form-data' form content
所以我想我会写 unmarshaller。我写了这个
implicit def MyJsonUnmarshaller[T: RootJsonReader] =
Unmarshaller.delegate[String, T](ContentTypes.`*`) {
value => {
val json = JsonParser(value)
json.convertTo[T]
}
}
但是如果我把它带到我的路线范围内,我会得到以下编译错误
too many arguments for method formFields: (fdm: spray.routing.directives.FieldDefMagnet)fdm.Out
formFields("checkin".as[FsqCheckin], "user".as[String], "secret".as[String]) {
^
如果范围内没有 json 解析器,这与我遇到的错误相同FsqCheckin
。
我该如何处理这个问题?