JAVA中带有JSON字符串的HTTP POST请求

我必须使用我已生成的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":[]} 

有什么想法吗?

最后我设法找到解决问题的方法……

 public static void SaveWorkFlow() throws IOException { CloseableHttpClient httpClient = HttpClients.createDefault(); HttpPost post = new HttpPost(myURLgoesHERE); List 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(); } } 

实现此目的的另一种方法如下所示:

 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(); } }