How do I send POST request with a JSON body using the HttpClient?

The following code snippet show you how to send POST request with a JSON body using HttpClient. The payload in this example is a user information containing id, first_name and a last_name. We placed the payload in an object called StringEntity and also set its content type to ContentType.APPLICATION_FORM_URLENCODED.

On the other end called by this post request, data can be read for instance in a Java Servlet using the HttpServletRequest.getParameter() method. For example to read the JSON body send below we can call request.getParameter("data"). This will give us the payload sent using the HttpClient Post request.

Let’s jump into the code snippet below:

package org.kodejava.apache.http;

import org.apache.http.HttpResponse;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.ContentType;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClientBuilder;

import java.io.IOException;

public class HttpPostJsonExample {
    public static void main(String[] args) {
        String payload = """
                data={
                    "username": "admin",
                    "first_name": "System",
                    "last_name": "Administrator"
                }
                """;
        StringEntity entity = new StringEntity(payload,
                ContentType.APPLICATION_FORM_URLENCODED);

        try (CloseableHttpClient httpClient = HttpClientBuilder.create().build()) {
            HttpPost request = new HttpPost("http://localhost:8080/register");
            request.setEntity(entity);

            HttpResponse response = httpClient.execute(request);
            System.out.println(response.getStatusLine().getStatusCode());
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

Maven Dependencies

<dependency>
    <groupId>org.apache.httpcomponents</groupId>
    <artifactId>httpclient</artifactId>
    <version>4.5.14</version>
</dependency>

Maven Central

Wayan

5 Comments

    • Hi Abhishek,

      You can get the response body as JSON string using the following code. The IOUtils come from the Apache Commons IO library.

      InputStream inputStream = response.getEntity().getContent();
      String json = IOUtils.toString(inputStream, StandardCharsets.UTF_8);
      
      Reply

Leave a Reply

This site uses Akismet to reduce spam. Learn how your comment data is processed.