spray-json 无法编组 Map[String,String]

Posted

技术标签:

【中文标题】spray-json 无法编组 Map[String,String]【英文标题】:spray-json cannot marshal Map[String,String] 【发布时间】:2013-09-16 01:08:32 【问题描述】:

我有以下路线设置,但是当我的地图在第一个完整块中返回时出现错误:

could not find implicit value for evidence parameter of type spray.httpx.marshalling.Marshaller[scala.collection.immutable.Map[String,String]]

import spray.routing.HttpService
import akka.actor.Actor
import spray.http.HttpRequest
import spray.routing.RequestContext
import spray.json.DefaultJsonProtocol._


class UserServiceActor extends Actor with RestUserService 
  def actorRefFactory = context
  def receive = runRoute(linkRoute)



trait RestUserService extends HttpService 

  val userService = new LinkUserService

  def linkRoute = 
    pathPrefix("user" / Segment) 
      userId =>
        path("link") 
          parameters('service ! "YT") 
            complete 
              Map("status"-> "OK", "auth_url" -> "http://mydomain.com/auth")
            
          
        
    

根据this test,我应该能够在导入 DefaultJsonProtocol._ 时将 Map 转换为 json,但即使这样也失败了:

val map:Map[String, String] = Map("hi"->"bye")
map.toJson

Cannot find JsonWriter or JsonFormat type class for scala.collection.mutable.Map[String,String]

不知道怎么回事:(

【问题讨论】:

【参考方案1】:

spray 邮件列表中的某个人指出正在创建的 Map 是一个可变的,spray-json 不会编组它。我将其更改为 scala.collection.immutable.Map 并添加了以下导入:

import spray.httpx.SprayJsonSupport._
import spray.json.DefaultJsonProtocol._

现在一切正常。

【讨论】:

天啊。在互联网上挖掘了 30 分钟后,终于有了一个与喷雾 API 更改保持同步的解决方案。谢谢!没有导入,我无法编组 JSObject。 @PawelSzulc 我也有同感

以上是关于spray-json 无法编组 Map[String,String]的主要内容,如果未能解决你的问题,请参考以下文章

无法使用 spray-json 解组 json HttpEntity

如何从map [string] interface {}编组XML?

喷json隐式UUID转换

Camel 的编组问题,无法正确编组 SOAP 请求?

json:无法将字符串解组为 MyMap.map 类型的 Go 值

无法编组 EJB 参数?