HTTP POST request with JSON String in JAVA

85,289

Finally I managed to find the solution to my problem ...

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();
        }
    }
Share:
85,289
Blerta Dhimitri
Author by

Blerta Dhimitri

Java EE Developer at Alten Italia (www.alten.it)

Updated on September 19, 2020

Comments

  • Blerta Dhimitri
    Blerta Dhimitri over 3 years

    I have to make a http Post request using a JSON string I already have generated. I tried different two different methods :

    1.HttpURLConnection
    2.HttpClient
    

    but I get the same "unwanted" result from both of them. My code so far with HttpURLConnection is:

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

    My code so far with HttpClient is:

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

    Where generated JsonString is like this:

    {"description":"prova_Process","modelgroup":"","modified":"false"}
    

    The response I get is:

    {"response":false,"message":"Error in saving the model. A JSONObject text must begin with '{' at 1 [character 2 line 1]","ids":[]}
    

    Any idea please?

  • Sundar G
    Sundar G about 9 years
    can you list down the required jars for this
  • XcodeNOOB
    XcodeNOOB almost 9 years
    there you go ---> compile group: 'org.apache.httpcomponents' , name: 'httpclient-android' , version: '4.3.5.1' | but it's deprecated so try to find something else :-\