找不到参数 um 的隐式值
Could not find implicit value for parameter um
我有一个具有以下结构的主应用程序:
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]]
一切正常,但是,我一直在进行一些代码清理,并将上面的三种情况 类 移到了另一个包中,现在我遇到了标题错误。我试过这个建议 (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
// ....
}
这是完整的错误:
could not find implicit value for parameter um: akka.http.scaladsl.unmarshalling.Unmarshaller[akka.http.scaladsl.model.ResponseEntity,List[com.elbauldelprogramador.domain.GHUser]]
[error] val users = Unmarshal(e).to[List[GHUser]]
[error] ^
阅读 spray's docs:
我终于解决了这个问题
基本上,我使用以下代码为每个案例 class 和一个名为 MyJsonProtocol
的对象创建了一个单独的文件:
object MyJsonProtocol extends DefaultJsonProtocol {
implicit val users = jsonFormat2(GHUser)
// ...
}
然后在我的主应用程序中,我只导入两个东西:
import com.elbauldelprogramador.api.MyJsonProtocol._
import com.elbauldelprogramador.domain.{GHOrg, GHRepo, GHUser}
我有一个具有以下结构的主应用程序:
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]]
一切正常,但是,我一直在进行一些代码清理,并将上面的三种情况 类 移到了另一个包中,现在我遇到了标题错误。我试过这个建议 (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
// ....
}
这是完整的错误:
could not find implicit value for parameter um: akka.http.scaladsl.unmarshalling.Unmarshaller[akka.http.scaladsl.model.ResponseEntity,List[com.elbauldelprogramador.domain.GHUser]] [error] val users = Unmarshal(e).to[List[GHUser]] [error] ^
阅读 spray's docs:
我终于解决了这个问题基本上,我使用以下代码为每个案例 class 和一个名为 MyJsonProtocol
的对象创建了一个单独的文件:
object MyJsonProtocol extends DefaultJsonProtocol {
implicit val users = jsonFormat2(GHUser)
// ...
}
然后在我的主应用程序中,我只导入两个东西:
import com.elbauldelprogramador.api.MyJsonProtocol._
import com.elbauldelprogramador.domain.{GHOrg, GHRepo, GHUser}