You are currently viewing Spring Boot RestTemplate Tutorial with Examples

Spring Boot RestTemplate Tutorial with Examples

Introduction

Spring Boot provides the RestTemplate class, which is a powerful and convenient way to communicate with RESTful web services. RestTemplate simplifies the process of making HTTP requests and handling responses, making it a popular choice for building RESTful clients in Spring applications.

In this tutorial, we’ll cover the basics of using RestTemplate in a Spring Boot application, including how to make GET, POST, PUT, and DELETE requests. We’ll also explore error handling and serialization/deserialization of JSON responses.

Prerequisites

Before starting, ensure that you have a basic understanding of Spring Boot and have a Spring Boot project set up. You can use Spring Initializr (https://start.spring.io/) to generate a new project with the required dependencies.

Dependencies

  • Spring Web

1. Adding Dependencies

Add the necessary dependencies to your pom.xml file:

<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
</dependencies>

2. Creating RestTemplate Bean

In your application configuration class or main class, create a RestTemplate bean:

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.client.RestTemplate;

@Configuration
public class AppConfig {

    @Bean
    public RestTemplate restTemplate() {
        return new RestTemplate();
    }
}

3. Making GET Requests

Now, let’s make a simple GET request to an external API. In this example, we’ll use the JSONPlaceholder API for testing.

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Service;
import org.springframework.web.client.RestTemplate;

@Service
public class MyService {

    @Autowired
    private RestTemplate restTemplate;

    public void getExample() {
         //Sends an HTTP GET request, retrieves the response body, and converts it into the specified class type.
        String response = restTemplate.getForObject("https://api.example.com/data", String.class);

        // returns a ResponseEntity which includes both the response body and the status code, headers, etc.
        ResponseEntity<String> responseEntity = restTemplate.getForEntity("https://api.example.com/data", String.class);
        HttpStatus statusCode = (HttpStatus) responseEntity.getStatusCode();
        String responseBody = responseEntity.getBody();
    }
}

4. Making POST Requests

Let’s now make a POST request and send data to the server.

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpEntity;
import org.springframework.http.HttpHeaders;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Service;
import org.springframework.web.client.RestTemplate;

@Service
public class MyService {

    @Autowired
    private RestTemplate restTemplate;

    public void postExample() {
    
         String apiUrl = "https://jsonplaceholder.typicode.com/posts";
        HttpHeaders headers = new HttpHeaders();
        headers.setContentType(MediaType.APPLICATION_JSON);
        String requestBody = "{\"title\":\"New Post\",\"body\":\"This is a new post.\",\"userId\":1}";

        HttpEntity<String> requestEntity = new HttpEntity<>(requestBody, headers);

        //Sends an HTTP POST request with the provided request body and maps the response body to the specified class type.
        String response = restTemplate.postForObject("https://api.example.com/data", requestEntity, String.class);

        //Sends an HTTP POST request and returns a ResponseEntity containing the response body, status code, and headers
        ResponseEntity<String> response1 = restTemplate.postForEntity(apiUrl, requestEntity, String.class);
        System.out.println("POST Response: " + response1.getBody());

        //Sends an HTTP POST request and returns the URI of the newly created resource (typically returned in the Location header).
        URI location = restTemplate.postForLocation(apiUrl, requestEntity);
    }
}

5. Making PUT and DELETE Requests

Similarly, you can make PUT and DELETE requests using put() and delete() methods:

// PUT Request
restTemplate.put(apiUrl, requestEntity, String.class);

// DELETE Request
restTemplate.delete(apiUrl);

6. Handling Errors

To handle errors, you can use RestTemplate exception handling mechanisms. For example:

try {
    ResponseEntity<String> response = restTemplate.getForEntity(apiUrl, String.class);
    System.out.println("GET Response: " + response.getBody());
} catch (HttpClientErrorException e) {
    System.err.println("Error: " + e.getRawStatusCode() + " - " + e.getResponseBodyAsString());
} catch (Exception e) {
    e.printStackTrace();
}

7.Exchange Method

Executes an HTTP request using any HTTP method (GET, POST, PUT, DELETE, etc.). This method provides the most flexibility as you can specify the HTTP method, request entity (including headers), and response type.

HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.APPLICATION_JSON);
HttpEntity<String> entity = new HttpEntity<>(jsonBody, headers);
ResponseEntity<String> response = restTemplate.exchange("https://api.example.com/data", HttpMethod.POST, entity, String.class);

Conclusion

In this tutorial, we covered the basics of using RestTemplate in a Spring Boot application. We discussed making GET, POST, PUT, and DELETE requests, handling errors, and demonstrated examples with the JSONPlaceholder API. RestTemplate is a versatile tool for working with RESTful services in your Spring Boot applications.

Leave a Reply