Spring Boot Microservices RestTemplate Example with E-commerce

Ramesh Fadatare
4 min readSep 19, 2024

--

In this tutorial, we’ll create two Spring Boot microservices for an e-commerce application: product-service and order-service. The order-service will communicate with the product-service to fetch product details using RestTemplate. We'll use the latest Spring Boot version 3.2+.

Learn Microservices development: Spring Boot Microservices Tutorial.

Step 1: Set up the environment

  • JDK 17 or later
  • Maven or Gradle
  • IDE (IntelliJ IDEA, Eclipse, etc.)

Step 2: Create and Set Up product-service

2.1 Create the Project

Use Spring Initializr to create a new project product-service with the following dependencies:

  • Spring Web
  • Spring Boot Actuator

2.2 Configure application.properties

Set up the application properties to run on port 8081.

server.port=8081

2.3 Create a Product Model

Create a simple Product model to represent the product data.

package com.example.productservice;

public class Product {
private String id;
private String name;
private double price;

// Constructor, getters, and setters
public Product(String id, String name, double price) {
this.id = id;
this.name = name;
this.price = price;
}

public String getId() {
return id;
}

public String getName() {
return name;
}

public double getPrice() {
return price;
}
}

2.4 Create a Controller

Create a controller to handle product-related requests.

package com.example.productservice;

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class ProductController {

@GetMapping("/products/{id}")
public Product getProduct(@PathVariable String id) {
// In a real application, this data would come from a database
return new Product(id, "Sample Product", 99.99);
}
}

Step 2: Create and Set Up order-service

3.1 Create the Project

Use Spring Initializr to create a new project order-service with the following dependencies:

  • Spring Web
  • Spring Boot Actuator
  • Spring Boot Starter Web

3.2 Configure application.properties

Set up the application properties to run on port 8082 and configure the URL for the product-service.

server.port=8082
product.service.url=http://localhost:8081/products

3.3 Create a RestTemplate Bean

Create a configuration class to define a RestTemplate bean.

package com.example.orderservice;

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.4 Create a Product Client

Create a service class to communicate with the product-service.

package com.example.orderservice;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import org.springframework.web.client.RestTemplate;

@Service
public class ProductServiceClient {

private final RestTemplate restTemplate;
private final String productServiceUrl;

public ProductServiceClient(RestTemplate restTemplate, @Value("${product.service.url}") String productServiceUrl) {
this.restTemplate = restTemplate;
this.productServiceUrl = productServiceUrl;
}

public Product getProductById(String productId) {
return restTemplate.getForObject(productServiceUrl + "/" + productId, Product.class);
}
}

3.5 Create a Product Model

Create a Product model to match the one in product-service.

package com.example.orderservice;

public class Product {
private String id;
private String name;
private double price;

// Constructor, getters, and setters
public Product() {}

public Product(String id, String name, double price) {
this.id = id;
this.name = name;
this.price = price;
}

public String getId() {
return id;
}

public String getName() {
return name;
}

public double getPrice() {
return price;
}
}

3.6 Create a Controller

Create a controller to handle order-related requests and use the ProductServiceClient to fetch product details.

package com.example.orderservice;

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class OrderController {

private final ProductServiceClient productServiceClient;

public OrderController(ProductServiceClient productServiceClient) {
this.productServiceClient = productServiceClient;
}

@GetMapping("/orders/{productId}")
public String createOrder(@PathVariable String productId) {
Product product = productServiceClient.getProductById(productId);
return "Order created for product: " + product.getName() + " with price: $" + product.getPrice();
}
}

Step 4: Run the Microservices

  1. Start product-service by running ProductServiceApplication.
  2. Start order-service by running OrderServiceApplication.

Step 5: Test the Communication

Open your browser or use a tool like Postman to test the endpoints:

The response from order-service should include the product details fetched from product-service.

Conclusion

You have successfully set up two Spring Boot microservices and demonstrated communication between them using RestTemplate. This example can be expanded to include more complex inter-service communication patterns and additional microservices.

Related Microservices Tutorials/Guides Using Spring Boot and Spring Cloud

What Are Microservices in Spring Boot?

Is Microservices a Framework?

What are Microservices and How to Build Microservices in Java?

How to Create Microservices in Java Using Spring Boot

Spring Boot Microservices Architecture

What is Spring Cloud?

Spring Boot Microservices Communication Example using RestTemplate

Spring Boot Microservices Communication Example using WebClient

Spring Boot Microservices Communication Example using Spring Cloud Open Feign

Spring Boot Microservices — Spring Cloud Config Server

Spring Boot Microservices — Spring Cloud Netflix Eureka-based Service Registry

Spring Boot Microservices — Spring Cloud API Gateway

Spring Boot Microservices API Gateway with Automatic Routes Mapping

Spring Cloud API Gateway Global Filter Example — Spring Boot Microservices

Event-Driven Microservices using Spring Boot and Kafka

Spring Boot Microservices with RabbitMQ Example

Spring Boot Microservices with Apache Kafka Example

Spring Boot Microservices REST API Example

Spring Boot Microservices with Spring Cloud Stream Example

Microservices Project using Spring Boot

Spring Boot Microservices E-Commerce Project: Step-by-Step Tutorial

My Highest-rated Udemy Course

Learn to build microservices using Spring Boot, Spring Cloud, React, Kafka, RabbitMQ, and REST API (REST Web Services).

Course link: Building Microservices with Spring Boot and Spring Cloud

--

--

No responses yet