首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >喷雾不会将我的case类转换为json,并期望得到一个spray.httpx.marshalling.ToResponseMarshallable

喷雾不会将我的case类转换为json,并期望得到一个spray.httpx.marshalling.ToResponseMarshallable
EN

Stack Overflow用户
提问于 2014-07-11 19:03:43
回答 2查看 7.5K关注 0票数 7

我试图重获thisthis,但我不断得到一个错误,我无法修复.

首先,这里是我的依赖项:

代码语言:javascript
复制
compile 'io.spray:spray-can_2.11:1.3.1'
compile 'io.spray:spray-routing_2.11:1.3.1',
compile 'io.spray:spray-json_2.11:1.2.6'

现在我想做的是:

代码语言:javascript
复制
class WHttpService extends Actor with HttpService with ActorLogging {

  implicit def actorRefFactory = context

  def receive = runRoute(route)

  lazy val route = logRequest(showReq _) {
    // Way too much imports but I tried all I could find
    import spray.json._
    import DefaultJsonProtocol._
    import MasterJsonProtocol._
    import spray.httpx.SprayJsonSupport._
    path("server" / Segment / DoubleNumber / DoubleNumber) { (login, first, second) =>
      get {
          complete {
            Answer(1, "test")
          }
      }
    }
  }

  private def showReq(req : HttpRequest) = LogEntry(req.uri, InfoLevel)
}

通过以下方式:

代码语言:javascript
复制
case object MasterJsonProtocol extends DefaultJsonProtocol with SprayJsonSupport {
  import spray.json._

  case class Answer(code: Int, content: String)
  implicit val anwserFormat: JsonFormat[Answer] = jsonFormat2(Answer)
}

现在我得到了这个错误:

代码语言:javascript
复制
Error:(42, 19) type mismatch;
 found   : MasterJsonProtocol.Answer
 required: spray.httpx.marshalling.ToResponseMarshallable
            Answer(1, "test")
                  ^

我试了很多东西,但没能成功。我试过

代码语言:javascript
复制
Answer(1, "test").toJson
Answer(1, "test").toJson.asJsObject

最后我做的是

代码语言:javascript
复制
complete {
    Answer(1, "test").toJson.compactPrint
}

这是可行的,但当我需要application/json时,它会以内容-Type:text/平原的形式发送到客户机。

有人看到这里的问题了吗?

编辑:我在github https://github.com/ydemartino/spray-test上添加了一个示例项目

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-07-11 21:13:29

我创建了一个拉请求来解决您的问题:https://github.com/ydemartino/spray-test/pull/1

必须先声明json协议对象,然后才能隐式使用它。我不太清楚为什么编译器不能解决这个问题,但是将对象声明移到顶部就解决了问题。

对于实际项目,请确保在每个文件中声明包,然后在导入语句中使用这些包。

票数 2
EN

Stack Overflow用户

发布于 2016-10-21 12:26:10

在我的例子中,无法解析的隐格式实例的名称与本地定义相冲突,因此它被隐藏起来。编译器对此保持了亲切的沉默。只是在几个小时的脑震荡后偶然发现的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24704749

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档