Akka Http获取返回空响应的查询

时间:2017-09-05 11:51:33

标签: scala akka akka-http

我正在摸索complete;我有一条编译的路线:

// the Route here is a domain object, not an akka-http Route   
def getRoute(coordinates: (LatLong, LatLong)): 
  Future[Option[Route]] = ???

我已经验证参数是否正确提取。当我调用方法(使用有效的纬度/长度)时,我期望接收表示(物理)路线的坐标数组,但是我收到一个带有空坐标列表的路径对象。这是val bindingFuture = Http().bindAndHandle(service.route, "0.0.0.0", port) 运行方法的签名:

akka

启动服务器本身看起来像这样:

akka-streams

我使用akka-http和{{1}} 2.5.4以及{{1}} 10.0.9,来自hseeberger(版本1.18.0)的Circe支持。如果有人知道我在这里做错了什么,请告诉我......任何帮助都将不胜感激!

2 个答案:

答案 0 :(得分:0)

  

而是我收到一个带有空坐标列表的路线对象。

我认为问题不在显示的代码中,而是在getRoute函数内的某处。

我有一种预感,你可能会对一个不可变的case类进行更改,并返回一个先前的副本,而不是更新的版本?

e.g。像下面这样的代码会给出你描述的错误:

import scala.concurrent.Future
import scala.concurrent.ExecutionContext.Implicits.global

trait LatLong

case class Route(steps: List[String]) // for example

def getRoute(coordinates: (LatLong, LatLong)): Future[Option[Route]] = {
  val myRoute = new Route(Nil)

  val steps = List("one", "two", "three")

  myRoute.copy(steps = steps) // BUG HERE, new copy discarded

  Future(Some(myRoute))
}

如果这不能解释问题,那么请您展示更多getRoute函数吗?

缩小范围的快速测试可能是暂时更改getRoute以返回硬编码的非空路由,并通过HTTP检查它是否正常。

答案 1 :(得分:0)

这完全是我的错;由于剪切和粘贴错误,源坐标作为源和目标发送,因此空的Route对象是合法的。感谢那些花时间研究我的搞砸的人!