Ошибка akka-http: не удалось найти неявное значение для параметра um: akka.http.scaladsl.unmarshalling.FromRequestUnmarshaller

Я знаю, что уже спрашивали, но я не могу найти ответ. Вот мой код:

import akka.http.scaladsl.marshallers.sprayjson.SprayJsonSupport
import spray.json.DefaultJsonProtocol

final case class Client(clientId:Int, clientName:String, platformIds:Int, host:String, password:String)

object ClientJson extends DefaultJsonProtocol with SprayJsonSupport {
    implicit val clientFormat = jsonFormat5(Client)
}

class HTTPListenerActor extends Actor with ImplicitMaterializer with RoadMap {

implicit val conf = context.system.settings.config
implicit val system = context.system
implicit val ec = context.dispatcher


Await.result(Http().bindAndHandle(roads, "interface", 8080), Duration.Inf)

override def receive:Receive = Actor.emptyBehavior
}

trait RoadMap extends Directives  {

val roads: Route = path("client"/IntNumber) { id =>
    import ClientJson._
    post {
        entity(as[Client]) { c => complete {c} }
    }
  }
}

Этот код генерирует ошибку

 [ant:scalac] /Users/smalov/Workspace/api-service/src/main/scala/com/acheron/HTTPListenerActor.scala:51: error: could not find implicit value for parameter um: akka.http.scaladsl.unmarshalling.FromRequestUnmarshaller[com.acheron.Client]
 [ant:scalac]           entity(as[Client]) { c =>

Теперь наиболее распространенная причина такого рода ошибок - забыть импортировать неявную сортировку в область видимости рядом с roads Определение, однако, я не забыл это. Другая причина может заключаться в том, что у меня есть скрытое FlowMaterializer по объему вместо ActorMaterializer, но ImplictMaterializer черта заботится об этом.

Что-нибудь еще, что я мог бы пропустить?

Я использую Scala 2.11.7, Akka 2.3.11, akka-http 1.0, spray-json 1.3.2

3 ответа

Я тоже получил ту же ошибку, и она исправлена ​​после импорта

" akka.http.scaladsl.marshallers.sprayjson.SprayJsonSupport._ "

Может быть это поможет

Импортируйте эти вещи.

import spray.json.RootJsonFormat
import spray.json.DefaultJsonProtocol._

Тогда имейте это в области, когда вы звоните entity(as[Client])

implicit val clientJsonFormat: RootJsonFormat[Client] = jsonFormat5(Client)

Оказалось мне нужно ActorMaterializer по объему в RoadMap черта характера. Итак, добавляя implicit val materializer: ActorMaterializer там решена проблема компиляции.

Я хотел бы, чтобы ошибка была немного более описательной....

Другие вопросы по тегам