bcsta
bcsta

Reputation: 2327

Java - Reading POST from HttpURLConnection throwing response code 400

I am opening an HttpURLConnection and with POST method, I am sending a JSON request that I build form another class. The JSON is structured correctly since I have validated it on debugging. The exception is thrown when trying to read the output response given from the server. This is the Error given

java.io.IOException: Server returned HTTP response code: 400 for URL:

However when I manually try to enter the Url from a web browser with a POST method chrome extension. I can view the response and everything works. So I am sure it has something to do with the following code where I make the connection and read/write.

    URL obj = new URL(url);

    HttpURLConnection connection = (HttpURLConnection) obj.openConnection();
    //add request header
    connection.setRequestMethod("POST");
    connection.setRequestProperty("Content-Type", "application/json");
    //mapping objects to json
    BatchRequest requestParameters = new BatchRequest(o,d);

    ObjectMapper mapper = new ObjectMapper();

    String json = mapper.writeValueAsString(requestParameters);

    connection.setDoOutput(true);
    DataOutputStream os = new DataOutputStream(connection.getOutputStream());

    os.writeBytes(json);
    os.flush();
    os.close();
         // this is where the program throws the exception  
    BufferedReader in = new BufferedReader(new InputStreamReader(connection.getInputStream()));

    String inputLine;
    StringBuilder response = new StringBuilder();

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

Both the URL and the JSON request are correct since They work when I try a manual conenction over a browser.

Upvotes: 1

Views: 768

Answers (1)

Gerard H. Pille
Gerard H. Pille

Reputation: 2578

A DataOutputStream is not needed. Just:

OutputStream os = con.getOutputStream();

Upvotes: 1

Related Questions