找不到参数um的隐式值

问题描述 投票:1回答:1

我有一个具有以下结构的主应用程序:

implicit val orgs: RootJsonFormat[GHOrg]                = jsonFormat3(GHOrg)
implicit val users: RootJsonFormat[GHUser]              = jsonFormat2(GHUser)
implicit val repos: RootJsonFormat[GHRepo]              = jsonFormat3(GHRepo)
case class GHUser(login: String, contributions: Option[Int] = None)
case class GHRepo(name: String, owner: GHUser, contributors_url: String)
case class GHOrg(name: String, repos_url: String, members_url: String)

我有时会这样做

Unmarshal(e).to[List[GHRepo]]

并且一切正常,但是,我一直在进行一些代码清理,并将上面的三个case类移到了另一个包中,现在我遇到了标题错误。我已经尝试过此建议(spray-json error: could not find implicit value for parameter um),但不起作用。

这里是当前代码的方式(未编译):

import akka.actor.ActorSystem
import akka.http.javadsl.model.StatusCodes
import akka.http.scaladsl.marshallers.sprayjson.SprayJsonSupport._
import akka.http.scaladsl.model._
import akka.http.scaladsl.unmarshalling.Unmarshal
import akka.stream.ActorMaterializer
import com.elbauldelprogramador.domain.{GHOrg, GHRepo, GHUser}
import org.slf4j.LoggerFactory
import spray.json.DefaultJsonProtocol._
import spray.json.RootJsonFormat

object Main extends App {

  implicit val system: ActorSystem                        = ActorSystem()
  implicit val materializer: ActorMaterializer            = ActorMaterializer()
  implicit val executionContext: ExecutionContextExecutor = system.dispatcher
  implicit val orgs: RootJsonFormat[GHOrg]                = jsonFormat3(GHOrg)
  implicit val users: RootJsonFormat[GHUser]              = jsonFormat2(GHUser)
  implicit val repos: RootJsonFormat[GHRepo]              = jsonFormat3(GHRepo)
// ....
Unmarshal(e).to[List[GHRepo]] // Error
// ....
}

这里是完整的错误:

找不到参数um的隐式值:akka.http.scaladsl.unmarshalling.Unmarshaller [akka.http.scaladsl.model.ResponseEntity,List [com.elbauldelprogramador.domain.GHUser]][错误] val用户= Unmarshal(e).to [List [GHUser]][错误] ^

scala unmarshalling implicit akka-http spray-json
1个回答
0
投票

我终于能够通过阅读spray's docs解决它:

基本上,我使用以下代码为每个案例类和一个名为MyJsonProtocol的对象创建了一个单独的文件:

object MyJsonProtocol extends DefaultJsonProtocol {
  implicit val users = jsonFormat2(GHUser)
  // ...
}

然后在我的主应用程序中,我只导入了两件事:

import com.elbauldelprogramador.api.MyJsonProtocol._
import com.elbauldelprogramador.domain.{GHOrg, GHRepo, GHUser}
© www.soinside.com 2019 - 2024. All rights reserved.