Open In App

How to Read an HTTP Response Body as a String in Java?

Last Updated : 26 Apr, 2024
Improve
Improve
Like Article
Like
Save
Share
Report

When working with the HTTP requests in Java it’s common to need to read the response body returned by the server. In many cases, you may want to read the response body as a string to easily parse and manipulate the data. In this article, we’ll explore how to read an HTTP response body as a string in Java.

How to Read an HTTP Response Body as a String in Java

To read the HTTP response body as a string in Java we can use the HttpClient and HttpResponse classes provided by the java.net.http package introduced in Java 11.

Below are the steps to achieve this:

  • Create an instance of the HttpClient class.
  • Create an instance of the HttpRequest class with the desired URL.
  • Send the HTTP request using the send method of the HttpClient instance in which returns an instance of the HttpResponse.
  • Use the body method of the HttpResponse instance to get the response body as a String.

Examples:

Let’s see an example of how to read an HTTP response body as a String in Java:

Java
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.util.concurrent.CompletableFuture;

public class GFG {
    public static void main(String[] args) {
        try {
            // Create HttpClient
            HttpClient client = HttpClient.newHttpClient();           
            // Create HttpRequest
            HttpRequest request = HttpRequest.newBuilder()
                    .uri(URI.create("http://example.com/api/resource"))
                    .build();           
            // Send request asynchronously
            CompletableFuture<HttpResponse<String>> future = client.sendAsync(request, HttpResponse.BodyHandlers.ofString());            
            // Process response
            future.thenApply(HttpResponse::body)
                  .thenAccept(System.out::println)
                  .join();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

Output :

<!doctype html>
<html>
<head>
<title>Example Domain</title>

<meta charset="utf-8" />
<meta http-equiv="Content-type" content="text/html; charset=utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<style type="text/css">
body {
background-color: #f0f0f2;
margin: 0;
padding: 0;
font-family: -apple-system, system-ui, BlinkMacSystemFont, "Segoe UI", "Open Sans", "Helvetica Neue", Helvetica, Arial, sans-serif;

}
div {
width: 600px;
margin: 5em auto;
padding: 2em;
background-color: #fdfdff;
border-radius: 0.5em;
box-shadow: 2px 3px 7px 2px rgba(0,0,0,0.02);
}
a:link, a:visited {
color: #38488f;
text-decoration: none;
}
@media (max-width: 700px) {
div {
margin: 0 auto;
width: auto;
}
}
</style>
</head>

<body>
<div>
<h1>Example Domain</h1>
<p>This domain is for use in illustrative examples in documents. You may use this
domain in literature without prior coordination or asking for permission.</p>
<p><a href="https://www.iana.org/domains/example">More information...</a></p>
</div>
</body>
</html>

In this example:

  • We create an instance of the HttpClient using newHttpClient method.
  • We create an instance of the HttpRequest with the desired URL using newBuilder method.
  • We send the HTTP request asynchronously using the sendAsync method of the HttpClient instance in which returns a CompletableFuture<HttpResponse<String>>.
  • We process the response body as the string using thenApply method of the CompletableFuture in which takes a Function that converts the HttpResponse to the string. Finally, we print the response body using the System.out.println.

Like Article
Suggest improvement
Previous
Next
Share your thoughts in the comments

Similar Reads