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方法在之前调用已经有结果。
有趣的是,如果我不等待结果,则没有空指针异常,但解析后的结果显示为正确(但程序不会退出)。但在那里,我真的使用这个代码,我不知何故需要等待成功完成以进一步处理它。
您将在下面找到问题的说明
答案 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
之后才能找到“真正的”错误,我觉得这很奇怪。但是,现在两种方法都可以正常工作。