2016-04-17 11 views
1

私はこの質問が何度も尋ねられていることを知っていますが、それらのすべてがspray-jsonを使用しています。私はplay-jsonを使いたかったのです。これは、提案された解決策が問題を解決しない理由である可能性があります。 routeの形質はRestApi.scalaという別のファイルにあります。それを利用するHttp.bindAndHandleMain.scalaという名前のファイルにあります。無関係な要素が削除されていない両方のファイルを以下に示します。ファイル全体を見たい場合は、上記のリンクをクリックしてください。play-json - パラメータumの暗黙の値を見つけることができませんでした

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 => 
         ^

ContactContact.scalaで定義されたデータモデルです。

私はこれが重複しないことを望みますが、私は本当にそうは思わない。どんな助けも大歓迎です。

答えて

1

簡単な解決方法があります。ビルドファイルにresolvers += Resolver.bintrayRepo("hseeberger", "maven")を追加し、libraryDependenciesに"de.heikoseeberger" %% "akka-http-play-json" % "1.5.3"を追加して、コードにimport de.heikoseeberger.akkahttpplayjson.PlayJsonSupport._をインポートしてください。スプレーjsonを使用するようにplay-jsonを使用できるようになりました。

関連する問題