У меня есть служба HTTP Akka, который возвращает строку, как показано ниже:Почему mapTo терпит неудачу в HTTP-клиенте Akka?
val route1: Route = {
path("hello") {
get{
complete{
println("Inside r1")
"You just accessed hello"
}
}
}
}
У меня есть клиент Akka HTTP, который пытается получить доступ к этому маршруту. Но нижеприведенный код не работает:
val future1 = Http()
.singleRequest(
HttpRequest(method = HttpMethods.GET,
uri = "http://localhost:8187/hello")).mapTo[String]
future1.onSuccess({
case y:String=>println(y)
})
Я не получаю никакого вывода. Но, если я использую вместо распаковать с flatMap, я получаю выход:
val future1:Future[String] = Http()
.singleRequest(
HttpRequest(method = HttpMethods.GET,
uri = "http://localhost:8187/hello")).flatMap(resp => Unmarshal(resp).to[String])
Почему МАПТ неисправный здесь и почему мне нужно flatMap и распаковать?
Edit:
я понял необходимость Unmarhsal, и я пытаюсь понять разницу между картой и flatMap
Например, приведенный ниже код дает мне результат, как ожидалось:
val future1:Future[String] = Http().singleRequest(
HttpRequest(method = HttpMethods.GET,
uri = http://localhost:8187/hello")).flatMap(testFlatFunc)
def testFlatFunc(x:HttpResponse):Future[String]={
return Unmarshal(x).to[String]
}
Но, если я пытаюсь заменить его на карте, как показано ниже я получаю выход как FulfilledFuture(You just accessed hello)
val future1:Future[String] = Http()
.singleRequest(
HttpRequest(method = HttpMethods.GET,
uri = "http://localhost:8187/hello")).map(testFunc)
def testFunc(x:HttpResponse): String={
return Unmarshal(x).to[String].toString
}