JAVA中带有JSON字符串的HTTP POST请求
Posted
技术标签:
【中文标题】JAVA中带有JSON字符串的HTTP POST请求【英文标题】:HTTP POST request with JSON String in JAVA 【发布时间】:2013-12-23 09:17:10 【问题描述】:我必须使用我已经生成的 JSON 字符串发出 http Post 请求。 我尝试了两种不同的方法:
1.HttpURLConnection
2.HttpClient
但是我从他们两个那里得到了相同的“不想要的”结果。 到目前为止,我使用 HttpURLConnection 的代码是:
public static void SaveWorkflow() throws IOException
URL url = null;
url = new URL(myURLgoeshere);
HttpURLConnection urlConn = null;
urlConn = (HttpURLConnection) url.openConnection();
urlConn.setDoInput (true);
urlConn.setDoOutput (true);
urlConn.setRequestMethod("POST");
urlConn.setRequestProperty("Content-Type", "application/json");
urlConn.connect();
DataOutputStream output = null;
DataInputStream input = null;
output = new DataOutputStream(urlConn.getOutputStream());
/*Construct the POST data.*/
String content = generatedJSONString;
/* Send the request data.*/
output.writeBytes(content);
output.flush();
output.close();
/* Get response data.*/
String response = null;
input = new DataInputStream (urlConn.getInputStream());
while (null != ((response = input.readLine())))
System.out.println(response);
input.close ();
到目前为止,我使用 HttpClient 的代码是:
public static void SaveWorkflow()
try
HttpClient httpClient = new DefaultHttpClient();
HttpPost postRequest = new HttpPost(myUrlgoeshere);
StringEntity input = new StringEntity(generatedJSONString);
input.setContentType("application/json;charset=UTF-8");
postRequest.setEntity(input);
input.setContentEncoding(new BasicHeader(HTTP.CONTENT_TYPE,"application/json;charset=UTF-8"));
postRequest.setHeader("Accept", "application/json");
postRequest.setEntity(input);
HttpResponse response = httpClient.execute(postRequest);
BufferedReader br = new BufferedReader(
new InputStreamReader((response.getEntity().getContent())));
String output;
while ((output = br.readLine()) != null)
System.out.println(output);
httpClient.getConnectionManager().shutdown();
catch (MalformedURLException e)
e.printStackTrace();
catch (IOException e)
e.printStackTrace();
生成JsonString的地方是这样的:
"description":"prova_Process","modelgroup":"","modified":"false"
我得到的回应是:
"response":false,"message":"Error in saving the model. A JSONObject text must begin with '' at 1 [character 2 line 1]","ids":[]
有什么想法吗?
【问题讨论】:
您是否尝试过仅将字符串转换为对象(解析 JSON)而中间没有 HTTP 传输步骤? 尝试使用 generatedJSONString.trim() 看起来你想使用一个 RESTful web 服务;您可能希望通过应用 JAX-RS API 让您的生活变得非常轻松。 事实上,我首先将 json 生成为一个对象,然后将其转换为字符串 ... 【参考方案1】:终于找到了解决问题的办法……
public static void SaveWorkFlow() throws IOException
CloseableHttpClient httpClient = HttpClients.createDefault();
HttpPost post = new HttpPost(myURLgoesHERE);
List<NameValuePair> params = new ArrayList<>();
params.add(new BasicNameValuePair("task", "savemodel"));
params.add(new BasicNameValuePair("code", generatedJSONString));
CloseableHttpResponse response = null;
Scanner in = null;
try
post.setEntity(new UrlEncodedFormEntity(params));
response = httpClient.execute(post);
// System.out.println(response.getStatusLine());
HttpEntity entity = response.getEntity();
in = new Scanner(entity.getContent());
while (in.hasNext())
System.out.println(in.next());
EntityUtils.consume(entity);
finally
in.close();
response.close();
【讨论】:
你能列出这个所需的罐子吗 你去 ---> 编译组:'org.apache.httpcomponents',名称:'httpclient-android',版本:'4.3.5.1' |但它已被弃用,所以尝试找到其他东西:-\【参考方案2】:另一种实现方式如下所示:
public static void makePostJsonRequest(String jsonString)
HttpClient httpClient = new DefaultHttpClient();
try
HttpPost postRequest = new HttpPost("Ur_URL");
postRequest.setHeader("Content-type", "application/json");
StringEntity entity = new StringEntity(jsonString);
postRequest.setEntity(entity);
long startTime = System.currentTimeMillis();
HttpResponse response = httpClient.execute(postRequest);
long elapsedTime = System.currentTimeMillis() - startTime;
//System.out.println("Time taken : "+elapsedTime+"ms");
InputStream is = response.getEntity().getContent();
Reader reader = new InputStreamReader(is);
BufferedReader bufferedReader = new BufferedReader(reader);
StringBuilder builder = new StringBuilder();
while (true)
try
String line = bufferedReader.readLine();
if (line != null)
builder.append(line);
else
break;
catch (Exception e)
e.printStackTrace();
//System.out.println(builder.toString());
//System.out.println("****************");
catch (Exception ex)
ex.printStackTrace();
【讨论】:
以上是关于JAVA中带有JSON字符串的HTTP POST请求的主要内容,如果未能解决你的问题,请参考以下文章
JS 将请求载荷中带有特殊字符的数据发送到服务层,我们需要转义吗?
用curl调用post接口json参数中带中文出现400错误,在postman中测试正常!