2016-04-17 5 views
1

Я знаю, что этот вопрос задавался много раз раньше, однако все они используют спрей-json. Я хотел использовать play-json. Возможно, поэтому предлагаемые решения не решают проблему. Характеристика с route находится в отдельном файле с именем RestApi.scala. Http.bindAndHandle, который использует его, находится в файле с именем Main.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 => 
         ^

Contact представляет собой модель данных, определенную в Contact.scala.

Надеюсь, это не дубликат, но я действительно так не думаю. Буду признателен за любую оказанную помощь.

ответ

1

Получается, что есть простое решение. Просто добавьте resolvers += Resolver.bintrayRepo("hseeberger", "maven") в свой файл сборки, а затем "de.heikoseeberger" %% "akka-http-play-json" % "1.5.3" в свою библиотеку. Заблокируйте и импортируйте import de.heikoseeberger.akkahttpplayjson.PlayJsonSupport._ в свой код. Теперь вы можете использовать play-json, как если бы вы использовали брызговик.

 Смежные вопросы

  • Нет связанных вопросов^_^