scala – Dispatch 0.9的基本用法
发布时间:2020-12-16 18:59:15 所属栏目:安全 来源:网络整理
导读:我要POST到一个URL,设置查询参数和标题,并将一个原始字符串传递到正文中.然后我想要请求并获取输出字符串,以便我可以将其转换为 JSON.我也想异常处理来响应不同种类的错误(并处理重定向) 但是Dispatch 0.9的记录是非常有限的,打破API的文档版本非常古怪,所以
我要POST到一个URL,设置查询参数和标题,并将一个原始字符串传递到正文中.然后我想要请求并获取输出字符串,以便我可以将其转换为
JSON.我也想异常处理来响应不同种类的错误(并处理重定向)
但是Dispatch 0.9的记录是非常有限的,打破API的文档版本非常古怪,所以我无法提出一个完整的解决方案.我完全被卡住了,所以我问了很多. 这是我可以想出来的,但设置查询参数是奇怪的: val solr = host("localhost",8983) val req = solr / "update" / "json" setQueryParameters( Map( "commit" -> "true")) setHeader( "Content-type","application/json") setBody( a) 但设置查询参数给我一个很难的错误: <console>:14: error: type mismatch; found : scala.collection.immutable.Map[java.lang.String,java.lang.String] required: com.ning.http.client.FluentStringsMap val req = solr / "update" / "json" setQueryParameters( Map( "commit" -> "true")) 请帮助完全设置请求:HTTPS,重定向,查询参数,头文件和POST方法. 还有帮助(同步地,我想要这样)执行请求以获得身体(和标题)和分支根据响应代码(200,301,302,400,500). 解决方法
你不算太远以下内容适用于您的请求定义:
import dispatch._ val params = Map("commit" -> "true") val headers = Map("Content-type" -> "application/json") val solr = host("localhost",8983) val req = solr / "update" / "json" << a <<? params <:< headers 或者,更少的操作性: val req = url("http://localhost:8983/update/json").POST .setBody(a) .addQueryParameter("commit","true") .addHeader("Content-type","application/json") 如果您想使用HTTPS,请在某处放置一个.secure. 你可以得到这样的承诺(这实际上代表延迟请求操作的结果): val result = Http(req OK as.String).either 然后使用它,例如: result() match { case Right(content) => println("Content: " + content) case Left(StatusCode(404)) => println("Not found") case Left(StatusCode(code)) => println("Some other code: " + code.toString) } 虽然我同意0.9 documentation在一些地方稀疏,但它确实提供了一个非常有用的解释,说明如何处理具有承诺的异步请求操作. OP的补充:这一点完成了我的这个答案.这样可以通过简单的阻止方式得到响应. val response = Http(req)() val body response.getResponseBody (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |