1

この質問は以前に何度も尋ねられたことを知っていますが、それらはすべてスプレー json を使用しています。play-json を使いたかったのです。これが、提案されたソリューションが問題を解決しない理由かもしれません。を持つ特性は、RestApi.scalarouteという名前の別のファイルにあります。それを利用するのはMain.scalaという名前のファイルにあります。無関係な要素が削除されていない両方のファイルを以下に示します。ファイル全体を見たい場合は、上記のリンクをクリックしてください。Http.bindAndHandle

RestApi.scala

package restApi

import akka.actor.{ActorSystem, Props}
import akka.http.scaladsl.model.StatusCodes
import akka.http.scaladsl.server.Directives._
import akka.pattern.ask
import akka.stream.ActorMaterializer
import akka.util.Timeout

import scala.concurrent.ExecutionContext
import scala.concurrent.duration._

trait RestApi {
  import models._
  import cassandraDB.{WriterActor, ReaderActor}
  implicit val system: ActorSystem
  implicit val materializer: ActorMaterializer
  implicit val ec: ExecutionContext

  implicit val timeout = Timeout(20 seconds)

  val cassandraWriterWorker = system.actorOf(Props[WriterActor], "cassandra-writer-actor")
  val cassandraReaderWorker = system.actorOf(Props[ReaderActor], "cassandra-reader-actor")

  val route =
    pathPrefix("api") {
      pathSuffix("contact") {
        // the line below has the error
        (post & entity(as[Contact])) { contact =>
          complete {
            cassandraWriterWorker ! contact
            StatusCodes.OK
          }
        }
      } ~
      pathSuffix("gps"/ "log") {
        // an analogous error message is shown in the line below
        (post & entity(as[GpsLog])) { gpsLog =>
          complete {
            cassandraWriterWorker ! gpsLog
            StatusCodes.OK
          }
        }
      }
    }
}

Main.scala

package initialization

import akka.actor.{ActorSystem, Props}
import akka.http.scaladsl.Http
import akka.stream.ActorMaterializer
import cassandraDB.{ConfigCassandraCluster, ReaderActor, WriterActor}
import gcm.GcmServer
import restApi.RestApi

object Main extends App with ConfigCassandraCluster with RestApi {

  override implicit val system = ActorSystem()
  override implicit val materializer = ActorMaterializer()
  override implicit val ec = system.dispatcher

  val write = system.actorOf(Props(new WriterActor(cluster)))
  val read = system.actorOf(Props(new ReaderActor(cluster)))
  val gcmServer = system.actorOf(Props(new GcmServer(11054...,"AIzaSyCOnVK...")), "gcm-server")
  val bindingFuture = Http().bindAndHandle(route, "localhost", 8080)


}

RestApi.scala エラー メッセージでエラーが発生する行を指摘します。

Error:(31, 26) could not find implicit value for parameter um: akka.http.scaladsl.unmarshalling.FromRequestUnmarshaller[models.Contact]
        (post & entity(as[Contact])) { contact =>
                         ^

これは、 Contact.scalaContactで定義されたデータ モデルです。

これが重複していないことを願っていますが、そうは思いません。どんな助けでも大歓迎です。

4

1 に答える 1

3

簡単な解決策があることがわかりました。resolvers += Resolver.bintrayRepo("hseeberger", "maven")ビルド ファイルに追加して"de.heikoseeberger" %% "akka-http-play-json" % "1.5.3"から libraryDependencies に追加しimport de.heikoseeberger.akkahttpplayjson.PlayJsonSupport._、コードにインポートするだけです。これで、spray-json を使用するように play-json を使用できるようになりました。

于 2016-04-20T20:16:30.367 に答える