以JSON对象作为有效载荷的REST API的POST请求

我正在尝试使用具有JSON有效负载的POST请求从REST

API获取JSON响应(在发送前应转换为URL编码的文本)。我已经按照一些教程实施了该过程,但是状态代码为400,但出现错误。我可能未在编码给定的JSON字符串或缺少某些内容。请帮我解决这个问题。谢谢。

这是我的代码

    try {

URL url = new URL("https://appem.totango.com/api/v1/search/accounts/health_dist");

HttpURLConnection conn = (HttpURLConnection) url.openConnection();

conn.setDoOutput(true);

conn.setRequestMethod("POST");

conn.setRequestProperty("Content-Type", "application/json");

conn.setRequestProperty("app-token", "1a1c626e8cdca0a80ae61b73ee0a1909941ab3d7mobile+testme@totango.com");

conn.setRequestProperty("Accept", "application/json, text/javascript, */*; q=0.01");

conn.setRequestProperty("X-Requested-With","XMLHttpRequest");

String payload = "{\"terms\":[{\"type\":\"totango_user_scope\",\"is_one_of\":[\"mobile+testme@totango.com\"]}],\"group_fields\":[{\"type\":\"health\"}]}";

OutputStream os = conn.getOutputStream();

os.write(payload.getBytes());

os.flush();

if (conn.getResponseCode() != HttpURLConnection.HTTP_CREATED) {

throw new RuntimeException("Failed : HTTP error code : "

+ conn.getResponseCode());

}

BufferedReader br = new BufferedReader(new InputStreamReader(

(conn.getInputStream())));

String output;

System.out.println("Output from Server .... \n");

while ((output = br.readLine()) != null) {

System.out.println(output);

}

conn.disconnect();

} catch (MalformedURLException e) {

e.printStackTrace();

} catch (IOException e) {

e.printStackTrace();

}

回答:

在跟踪了许多帖子和教程超过24小时后,我知道我没有正确发送URL参数。而且我还了解到使用 REST

API调用相对容易一些。我解决了我的HTTP错误代码400,并从服务器获取了响应。这是我的问题的工作代码。

        try {

httpClient = HttpClients.createDefault();

httpPost = new HttpPost("https://appem.totango.com/api/v1/search/accounts/health_dist");

List<NameValuePair> headers = new ArrayList<NameValuePair>(); //ArrayList to store header parameters

List<NameValuePair> urlParameters = new ArrayList<NameValuePair>(); //ArrayList to store URL parameters

urlParameters.add(new BasicNameValuePair("query","{\"terms\":[{\"type\":\"totango_user_scope\",\"is_one_of\":[\"mobile+testme@totango.com\"]}],\"group_fields\":[{\"type\":\"health\"}]}"));

headers.add(new BasicNameValuePair("app-token", "1a1c626e8cdca0a80ae61b73ee0a1909941ab3d7mobile+testme@totango.com"));

headers.add(new BasicNameValuePair("Accept", "application/json, text/javascript, */*; q=0.01"));

headers.add(new BasicNameValuePair("X-Requested-With", "XMLHttpRequest"));

httpPost.setEntity(new UrlEncodedFormEntity(urlParameters));

for (NameValuePair h : headers)

{

httpPost.addHeader(h.getName(), h.getValue());

}

response = httpClient.execute(httpPost);

if (response.getStatusLine().getStatusCode() != 200) {

throw new RuntimeException("Failed : HTTP error code : "

+ response.getStatusLine().getStatusCode());

}

BufferedReader br = new BufferedReader(new InputStreamReader(

(response.getEntity().getContent())));

String output;

System.out.println("Output from Server .... \n");

while ((output = br.readLine()) != null) {

System.out.println(output);

}

} catch (MalformedURLException e) {

e.printStackTrace();

} catch (IOException e) {

e.printStackTrace();

} finally {

try{

response.close();

httpClient.close();

}catch(Exception ex) {

ex.printStackTrace();

}

}

以上是 以JSON对象作为有效载荷的REST API的POST请求 的全部内容, 来源链接: utcz.com/qa/398967.html

回到顶部