RESTful microservice using Springboot
In this tutorial, we will develop a RESTful microservice using spring boot.
Step 1 : Create a spring starter project
Refer below pom.xml file
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.6.6</version>
<relativePath /> <!-- lookup parent from repository -->
</parent>
<groupId>com.javatrainingschool</groupId>
<artifactId>spring-boot-app</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>spring-boot-app</name>
<description>Demo project for Spring Boot</description>
<properties>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
Step 2 : Set up application.properties file
We will use in-memory h2 database for this example. Use below settings in application.properties file
server.port=8081
spring.application.name= Simple Spring Boot App
spring.datasource.driver-class-name=org.h2.Driver
spring.datasource.url=jdbc:h2:mem:bootapp;DB_CLOSE_DELAY=-1
spring.datasource.username=sa
spring.datasource.password=sa
spring.jpa.defer-datasource-initialization=true
spring.jpa.show-sql=true
spring.h2.console.enabled=true
Step 3 : Create entity class Drink.java
package com.javatrainingschool.entity;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;
@Entity
@Table(name = "Drink")
public class Drink {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private int id;
private String name;
private String type;
private int price;
public Drink() {
super();
// TODO Auto-generated constructor stub
}
public Drink(int id, String name, String type, int price) {
super();
this.id = id;
this.name = name;
this.type = type;
this.price = price;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getType() {
return type;
}
public void setType(String type) {
this.type = type;
}
public int getPrice() {
return price;
}
public void setPrice(int price) {
this.price = price;
}
@Override
public String toString() {
return "Drink [id=" + id + ", name=" + name + ", type=" + type + ", price=" + price + "]";
}
}
Step 4 : Create repository interface
package com.javatrainingschool.repository;
import java.util.List;
import org.springframework.data.repository.CrudRepository;
import com.javatrainingschool.entity.Drink;
public interface DrinkRepository extends CrudRepository<Drink, Integer>{
List<Drink> findByName(String name);
}
Step 5 : Create Rest Controller class DrinkController.java
package com.javatrainingschool.controller;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.PutMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseStatus;
import org.springframework.web.bind.annotation.RestController;
import com.javatrainingschool.entity.Drink;
import com.javatrainingschool.repository.DrinkRepository;
@RestController
@RequestMapping("/api/drink")
public class DrinkController {
@Autowired
private DrinkRepository drinkRepo;
@GetMapping
public Iterable<Drink> findAll() {
return drinkRepo.findAll();
}
@GetMapping("/name/{drinkName}")
public List<Drink> findByName(@PathVariable String drinkName) {
return drinkRepo.findByName(drinkName);
}
@GetMapping("/{id}")
public Drink findOne(@PathVariable Integer id) {
return drinkRepo.findById(id);
}
@PostMapping("/create")
@ResponseStatus(HttpStatus.CREATED)
public Drink create(@RequestBody Drink drink) {
return drinkRepo.save(drink);
}
@DeleteMapping("delete/{id}")
public void delete(@PathVariable Integer id) {
drinkRepo.findById(id);
drinkRepo.deleteById(id);
}
@PutMapping("update/{id}")
public Drink updateDrink(@RequestBody Drink drink, @PathVariable Integer id) {
drinkRepo.findById(id);
return drinkRepo.save(drink);
}
}
Step 6 : Add data.sql file under src/main/resources folder
insert into drink (id, name, type, price) values (101, 'Cappi Nirvana', 'cold', 399);
insert into drink (id, name, type, price) values (102, 'Pineapple punch', 'cold', 249);
insert into drink (id, name, type, price) values (103, 'Aam Pana', 'cold', 199);
Step 6 : Run and test the microsrevice
Since this is a microservice, we need to have a REST client to test it. Postman is one such client which we will use in this tutorial. Postman is a tool which is used to test RESTful web/microservices.
If you do not have Postman already installed on your machine, click here to install it.
After Postman is installed. Open it and hit below urls.
Get all drinks request
Create Drink Request
Json request/response for Create Drink end point. Please note that this will be a post request.
Request
{
"name" : "Cold Coffee",
"type" : "Cold drink",
"price": 230
}
Similary, you can create more drinks with different values.
Delete a drink request
Simlilary, a drink can be deleted.
Update drink request
Request
{
"id" : 1,
"name" : "Cappuccino",
"type" : "Hot Coffee",
"price": 149
}
Enable h2 console
Database h2 can also be accessed to verify the records. For that, you need enable h2-console.
Add below property to enable h2-console.
spring.h2.console.enabled=true
Hit the below url to access h2-console. port will be the one on which your microservice is running
http://localhost:8081/h2-console