scala future 空指针匹配错误

scala future null pointer match error

scala futures 的新手我尝试调用类似

的网络服务
wsClient.url(baseUrl + url).withHeaders("Content-Type" -> "application/json").post(dataForR).flatMap(parseOutlierResponse)

使用 ply-ws

我验证并映射响应如下https://gist.github.com/geoHeil/943a18d43279762ad4cdfe9aa2e40770

主要是:

Await.result(callAMethodCallingTheFirstSnippet, 5.minutes)

奇怪的是,这个 在 repl 中工作得很好。但是,如果通过 sbt run 运行,我会得到 NullPointer 异常。我已经手动验证了 JSON 响应。它验证起来轻而易举。甚至映射也很好用。不过,肯定是我用的future有问题。但我不确定出了什么问题。似乎 flatMap 方法被调用之前 已经有一个结果。

有趣的是,如果我不等待结果没有空指针异常,但解析的结果显示正确(但是,程序不会退出)。但是在那里,我真正使用这段代码的地方,我不知何故需要等待成功完成才能进一步处理它。

下面是问题的说明

我没有发现您的代码有任何重大问题!我用下面的代码位做了一个小测试,它似乎在 REPL 和使用 sbt 运行:

时都运行良好
    WS.clientUrl(s"http://$hostName/api/put").withHeaders(jsonHeaders: _*).post(body).map { r =>
      if (r.status >= 400)
        logger.warn(s"Invalid http response status: ${r.status} \n ${r.body}")
      else
        logger.debug(s"Successfully persisted data. Http response ${r.status}")
    }

经过越来越多的调试,我发现一些隐式在错误的范围内,依赖大小写的顺序是错误的-类。将它们移动到正确的范围(执行请求的方法)后,空指针异常得到修复。

我从flatmap改成map后才发现"real"错误,我觉得很奇怪。但是,现在这两种方法都可以正常工作。