Сервер Scala akka http - печатать POST-сообщения - PullRequest
0 голосов
/ 13 февраля 2019

У меня есть простой сервер scala, который прослушивает localhost: 9000, и я хочу напечатать текст каждого полученного сообщения.

Когда я отправляю сообщение на localhost: 9000, я получаю "Привет, мир!".Я хочу напечатать фактические данные, которые были отправлены в теле сообщения POST.

import akka.actor.ActorSystem
import akka.http.scaladsl.Http
import akka.http.scaladsl.server.Directives._
import akka.stream.ActorMaterializer

object Main extends App {
  val host = "0.0.0.0"
  val port = 9000
  implicit val system: ActorSystem = ActorSystem("helloworld")
  implicit val materializer: ActorMaterializer = ActorMaterializer()
  def route = path("hello") {
    post {
      println("we got a post message!")
      complete("Hello, World!")
    }
  }
  Http().bindAndHandle(route, host, port)
}

Любая помощь будет оценена.

Ответы [ 2 ]

0 голосов
/ 13 февраля 2019

Один из способов - извлечь запрос с помощью директивы extractRequest, преобразовать сущность в Strictmap и onComplete до Future

def route = path("hello") {
  post {
    extractRequest {req =>
      req.entity.toStrict(2.seconds).map(_.data.utf8String).onComplete(println)
      complete("Hello, World!")
    }
  }
}
0 голосов
/ 13 февраля 2019

Все, что вам нужно сделать, это просто извлечь данные из почтового запроса.Например;

...
def route = path("hello") {
     post {
          entity(as[String]) { str =>
               println(str)
               ... // do stg
          }
     }
}
...

Вы можете взглянуть на эту страницу .Надеюсь, это поможет!

...