Не удалось найти неявное значение для параметра um - PullRequest
1 голос
/ 01 ноября 2019

У меня было Основное приложение со следующей структурой:

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 ошибка: не удалось найти неявное значение для параметра 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, Список [com.elbauldelprogramador.domain.GHUser]] [ошибка] val users = Unmarshal (e) .to [Список [GHUser]] [ошибка] ^

1 Ответ

0 голосов
/ 02 ноября 2019

Я наконец-то смог решить эту проблему, прочитав документы по аэрозолю :

По сути, я создал отдельный файл для каждого класса дел и один объект с именем MyJsonProtocol со следующим кодом:

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

Затем в моем основном приложении я просто импортирую обе вещи:

import com.elbauldelprogramador.api.MyJsonProtocol._
import com.elbauldelprogramador.domain.{GHOrg, GHRepo, GHUser}
...