我正在摸索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支持。如果有人知道我在这里做错了什么,请告诉我......任何帮助都将不胜感激!
答案 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对象是合法的。感谢那些花时间研究我的搞砸的人!