Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Send JSON data through POST in Java

Tags:

java

jackson

I have this code to send JSON data (passed as a string) to the server (This code works when English characters are to be sent as values in dataJSON as far as I tested):

private static String sendPost(String url, String dataJSON) throws Exception {

    System.out.println("Data to send: " + dataJSON);


    URL obj = new URL(url);
    HttpURLConnection con = (HttpURLConnection) obj.openConnection();
    String type = "application/json;charset=utf-8";

    // add reuqest header
    con.setRequestMethod("POST");
    con.setRequestProperty("User-Agent", "Mozilla/5.0");
    con.setRequestProperty("Accept-Language", "en-US,en;q=0.5");
    con.setRequestProperty("Content-Length", String.valueOf(dataJSON.getBytes("UTF-8").length));
    con.setRequestProperty("Content-Type", type);

    // Send post request
    con.setDoOutput(true);
    DataOutputStream wr = new DataOutputStream(con.getOutputStream());
    wr.writeUTF(dataJSON);
    wr.flush();
    wr.close();

    int responseCode = con.getResponseCode();
    System.out.println("\nSending 'POST' request to URL : " + url);
    System.out.println("Response Code : " + responseCode);

    BufferedReader in = new BufferedReader(
            new InputStreamReader(con.getInputStream()));
    String inputLine;
    StringBuffer response = new StringBuffer();

    while ((inputLine = in.readLine()) != null) {
        response.append(inputLine);
    }
    in.close();

    System.out.print("Response string from POST: " + response.toString() + "\n");
    return response.toString();

}

Problem is I don't get correct response, which I get for example using DHC Restlet Client.

The problem is I think the dataJSON must be encoded in UTF8. That's how the server expects it most likely. But it seems I have some problem in code the way I try to convert it and send it. Can someone help me send data in body as UTF8 string in above example?


1 Answers

I think I solved with this approach:

private static String sendPost2(String urlStr, String dataJSON) throws Exception {


    URL url = new URL(urlStr);
    HttpURLConnection conn = (HttpURLConnection) url.openConnection();
    conn.setConnectTimeout(5000);
    conn.setRequestProperty("Content-Type", "application/json; charset=UTF-8");
    conn.setDoOutput(true);
    conn.setDoInput(true);
    conn.setRequestMethod("POST");

    OutputStream os = conn.getOutputStream();
    os.write(dataJSON.getBytes("UTF-8"));
    os.close();

    // read the response
    InputStream in = new BufferedInputStream(conn.getInputStream());
    String result = new BufferedReader(new InputStreamReader(in)) .lines().collect(Collectors.joining("\n"));

    in.close();
    conn.disconnect();

    return result;

}

Please suggest alternative if you see problem with it.


Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!