Java 访问使用POSTMAN运行良好的Web API时出错
我尝试调用一个WEB API,并使用以下代码获得JSON输出 我已经用POSTMAN测试了这个,效果很好。POST请求的标头中有两个值,正文中还有一些值 但是当我尝试使用ApacheHTTP客户端访问相同的WEB API时,我得到了以下输出和错误:Java 访问使用POSTMAN运行良好的Web API时出错,java,api,web,apache-httpclient-4.x,postman,Java,Api,Web,Apache Httpclient 4.x,Postman,我尝试调用一个WEB API,并使用以下代码获得JSON输出 我已经用POSTMAN测试了这个,效果很好。POST请求的标头中有两个值,正文中还有一些值 但是当我尝试使用ApacheHTTP客户端访问相同的WEB API时,我得到了以下输出和错误: Response Code : 200 Result:{"errorCode":3000,"errorMessage":"Invalid request parameters"} 代码: 导入java.io.BufferedReader; 导入ja
Response Code : 200
Result:{"errorCode":3000,"errorMessage":"Invalid request parameters"}
代码:
导入java.io.BufferedReader;
导入java.io.IOException;
导入java.io.InputStreamReader;
导入java.util.ArrayList;
导入java.util.List;
导入java.util.logging.Level;
导入java.util.logging.Logger;
导入org.apache.http.HttpResponse;
导入org.apache.http.NameValuePair;
导入org.apache.http.client.HttpClient;
导入org.apache.http.client.entity.UrlEncodedFormEntity;
导入org.apache.http.client.methods.HttpPost;
导入org.apache.http.impl.client.HttpClientBuilder;
导入org.apache.http.message.BasicNameValuePair;
公共类白资源{
公共静态void main(字符串[]args){
试一试{
字符串url=”https://example.com/api";
HttpClient client=HttpClientBuilder.create().build();
HttpPost=新的HttpPost(url);
//标题
setHeader(“内容类型”、“应用程序/json”);
post.setHeader(“接受字符集”、“UTF-8”);
List urlParameters=new ArrayList();
添加(新的BasicNameValuePair(“requestType”、“xxxx”);
添加(新的BasicNameValuePair(“projectToken”、“xxxx-xxxx-xxxx”);
setEntity(新的UrlEncodedFormEntity(urlParameters));
HttpResponse response=client.execute(post);
System.out.println(“响应代码:+Response.getStatusLine().getStatusCode());
BufferedReader rd=新的BufferedReader(新的InputStreamReader(response.getEntity().getContent());
StringBuilder结果=新建StringBuilder();
字符串行=”;
而((line=rd.readLine())!=null){
结果。追加(行);
}
System.out.println(“结果:+Result”);
}捕获(IOEX异常){
Logger.getLogger(WhiteSourceAPI.class.getName()).log(Level.SEVERE,null,ex);
}
}
}
正如@VitalyZ提到的,我不应该使用UrlEncodedFormEntity作为主体,而应该使用原始JSON
JSONObject json = new JSONObject();
json.put("requestType", "xxxx");
json.put("projectToken", "xxxxxxxxxxxxxx");
StringEntity params = new StringEntity(json.toString());
post.setEntity(params);
正如@VitalyZ提到的,我不应该使用UrlEncodedFormEntity作为主体,而是使用原始JSON
JSONObject json = new JSONObject();
json.put("requestType", "xxxx");
json.put("projectToken", "xxxxxxxxxxxxxx");
StringEntity params = new StringEntity(json.toString());
post.setEntity(params);
web api的参数是什么?您将内容类型设置为“application/json”,然后将UrlEncodedFormEntity作为主体传递-这不是json。尝试传递原始JSON以检查这是否适用于you@VitalyZ谢谢,使用原始JSON而不是UrlEncodedFormEntity作为正文是有效的。web api的参数是什么?您将内容类型设置为“application/JSON”,然后将UrlEncodedFormEntity作为正文传递-这不是JSON。尝试传递原始JSON以检查这是否适用于you@VitalyZ谢谢,使用原始JSON代替UrlEncodedFormEntity作为主体工作。