scala future null指针匹配错误

时间:2016-05-20 17:37:05

标签: scala mapping future flatmap playframework-webservice

scala期货新手我尝试调用像

这样的网络服务
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响应。它像微风一样有效地验证。即使映射效果很好。但是,我正在使用的期货一定存在问题。但我不确定是什么问题。似乎 flatMap方法在之前调用已经有结果。

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

您将在下面找到问题的说明

How can the response body be null?

2 个答案:

答案 0 :(得分:0)

我认为您的代码没有任何重大问题!我使用以下代码位进行了一个小测试,它似乎在REPL和使用sbt run时完美运行:

    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}")
    }

答案 1 :(得分:0)

经过越来越多的调试后,我发现一些隐含在错误的范围内,并且依赖的case-classes的顺序是错误的。将它们移动到正确的范围(执行请求的方法)后,空指针异常是固定的。

我从flatmap更改为map之后才能找到“真正的”错误,我觉得这很奇怪。但是,现在两种方法都可以正常工作。