Ошибка 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
там решена проблема компиляции.
Я хотел бы, чтобы ошибка была немного более описательной....