Spring Boot Microservices RestTemplate Example with E-commerce
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
- Start
product-service
by runningProductServiceApplication
. - Start
order-service
by runningOrderServiceApplication
.
Step 5: Test the Communication
Open your browser or use a tool like Postman to test the endpoints:
product-service
:http://localhost:8081/products/1
order-service
:http://localhost:8082/orders/1
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?
What are Microservices and How to Build Microservices in Java?
How to Create Microservices in Java Using Spring Boot
Spring Boot Microservices Architecture
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