我使用Bee Client作为我项目的http客户端,我想知道如何通过JSON作为我的请求主体发出POST请求。
我使用KairosDB作为数据库,我需要查询来自http://localhost:8080/api/v1/datapoints/query
的数据。 KairosDB期望在以下正文中发出POST请求:
{
"start_relative": {
"value": "5",
"unit": "years"
},
"metrics": [
{ "name": "DP_391366" },
{ "name": "DP_812682" }
]
}
如何使用Bee Client实现这样的通话?我已经搜索了Bee客户端,但我还没有找到如何传递JSON字符串作为POST或GET请求,只是其他参数(如map)。
请注意,这是一个自行回答的问题。
答案 0 :(得分:1)
在搜索了几乎所有Bee Client API及其部分文档之后,我发现蜜蜂客户端文档中的this small code example可以回答问题(检查"制作PUT请求部分)。
1)导入以下模块:
import uk.co.bigbeeconsultants.http._
import uk.co.bigbeeconsultants.http.request.RequestBody
import uk.co.bigbeeconsultants.http.response.Response
import uk.co.bigbeeconsultants.http.header.MediaType._
import java.net.URL
2)之后,它很简单:
// Creating our body within a JSON string.
val jsonBody = RequestBody("""{ "x": 1, "y": true }""", APPLICATION_JSON)
// Making the POST request passing the JSON as body of the request.
val httpClient = new HttpClient
val response: Response = httpClient.post(new URL(query_url), Option(jsonBody))
// Print to check the status of the request.
println(response.status)
println(response.body.asString)
如果您想要一个真实的案例来更好地了解它的工作原理,我在PlayJSON的帮助下制作了以下代码:
import uk.co.bigbeeconsultants.http._
import uk.co.bigbeeconsultants.http.request.RequestBody
import uk.co.bigbeeconsultants.http.response.Response
import uk.co.bigbeeconsultants.http.header.MediaType._
import java.net.URL
import play.api.libs.json._
object SimpleApp {
def main(args: Array[String]) {
// Creating JSON
val query_url = "http://localhost:8080/api/v1/datapoints/query"
val json: JsValue = Json.parse("""
{
"start_relative": {
"value": "5",
"unit": "years"
},
"metrics": [
{
"name": "DP_391366"
},
{
"name": "DP_812682"
}
]
}
""")
val jsonBody = RequestBody(Json.stringify(json), APPLICATION_JSON)
// Making API call
val httpClient = new HttpClient
val response: Response = httpClient.post(new URL(query_url), Option(jsonBody))
println(response.status)
println(response.body.asString)
}
}
希望它有所帮助!