Starting with Spring Boot Rest

Abhishek Singh
4 min readAug 28, 2022

--

Spring Boot provides a very good support to building RESTful Web Services for enterprise applications. In this post we will create simple RESTful web services using Spring Boot.

For building a RESTful Web Services, we need to add the Spring Boot Starter Web dependency into the pom.xml file.

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

<?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.7.3</version>

<relativePath /> <! — lookup parent from repository →

</parent>

<groupId>com.abhishek.spring.boot</groupId>

<artifactId>SpringBootHandsOn</artifactId>

<version>0.0.1-SNAPSHOT</version>

<name>SpringBootHandsOn</name>

<description>Spring Boot Demo Project</description>

<properties>

<java.version>1.8</java.version>

</properties>

<dependencies>

<dependency>

<groupId>org.springframework.boot</groupId>

<artifactId>spring-boot-starter-web-services</artifactId>

</dependency>

<dependency>

<groupId>org.springframework.boot</groupId>

<artifactId>spring-boot-devtools</artifactId>

<scope>runtime</scope>

<optional>true</optional>

</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>

Before we go ahead to build a RESTful web service, it is important that we have knowledge of the following annotations −

Rest Controller

The @RestController annotation is used to define the RESTful web services. It serves JSON, XML and custom response. Its syntax is shown below −

@RestController
public class EmployeeController {
}

Request Mapping

The @RequestMapping annotation is used to define the Request URI to access the REST Endpoints. We can define Request method to consume and produce object. The default request method is GET.

@RequestMapping(value="/employees")
public ResponseEntity<Object> getEmployees() { }

Request Body

The @RequestBody annotation is used to define the request body content type.

public ResponseEntity<Object> createEmployee(@RequestBody Product product) {
}

Path Variable

The @PathVariable annotation is used to define the custom or dynamic request URI. The Path variable in request URI is defined as curly braces {} as shown below −

@GetMapping("/getEmpNo/{empNo}")
public Employee getEmployee(@PathVariable("empNo") String empNo) {
System.out.println("Data Fetched Successfully");return employeeDao.getEmployee(empNo);
}

Request Parameter

The @RequestParam annotation is used to read the request parameters from the Request URL. By default, it is a required parameter. We can also set default value for request parameters as shown here −

public ResponseEntity<Object> getEmployee(
@RequestParam(value = "name", required = false, defaultValue = "honey") String name) {
}

Lets go back to create a simple Employee Spring boot project using various Http request methods.

Note : Here we are using custom java classes to have data using collection we are not using spring-boot-starter-jpa

Here we have a simple model class

package com.abhishek.spring.boot.model;

import org.springframework.stereotype.Component;

@Component

public class User {

private int id;

private String firstName;

private String lastName;

private String email;

private String country;

public User() {

}

public User(int id, String firstName, String lastName, String email, String country) {

super();

this.id = id;

this.firstName = firstName;

this.lastName = lastName;

this.email = email;

this.country = country;

}

public int getId() {

return id;

}

public String getFirstName() {

return firstName;

}

public String getLastName() {

return lastName;

}

public String getEmail() {

return email;

}

public String getCountry() {

return country;

}

public void setId(int id) {

this.id = id;

}

public void setFirstName(String firstName) {

this.firstName = firstName;

}

public void setLastName(String lastName) {

this.lastName = lastName;

}

public void setEmail(String email) {

this.email = email;

}

public void setCountry(String country) {

this.country = country;

}

@Override

public String toString() {

return “User [id=” + id + “, firstName=” + firstName + “, lastName=” + lastName + “, email=” + email

+ “, country=” + country + “]”;

}

}

Here we have simple java class to have business logic

package com.abhishek.spring.boot.dao;

import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import java.util.stream.Collectors;

import org.springframework.stereotype.Repository;

import com.abhishek.spring.boot.model.User;

@Repository
public class UserDao {

private static final List<User> userList = new ArrayList<User>();

static {
createUser();
}

private static void createUser() {

User user1 = new User(1, “Heidi”, “Pitts”, “heidi.com”, “Costa Rica”);
User user2 = new User(2, “Daphne”, “Workman”, “daphne.com”, “UK”);
User user3 = new User(3, “Jemima”, “Duffy”, “jemima.com”, “Colombia”);
User user4 = new User(4, “Roary”, “Berg”, “roary.com”, “US”);
User user5 = new User(5, “Byron”, “Benjamin”, “byron.com”, “Germany”);
User user6 = new User(6, “Hermann”, “Pardon”, “hermann.com”, “Poland”);
User user7 = new User(7, “Rossie”, “Giovannini”, “rossie.com”, “Russia”);
User user8 = new User(8, “Killian”, “Brotherheed”, “killian.com”, “Indonesia”);
User user9 = new User(9, “Marga”, “Tice”, “marga.com”, “Spain”);
User user10 = new User(10, “Khalil”, “Edelheit”, “khalil.com”, “China”);
User user11 = new User(11, “Rebecka”, “Bavage”, “rebecka.com”, “Azerbaijan”);
User user12 = new User(12, “Athene”, “Errigo”, “athene.com”, “Canada”);
User user13 = new User(13, “Jarrod”, “Sterling”, “jarrod.com”, “Sweden”);
User user14 = new User(14, “Robinet”, “Furmonger”, “robinet.com”, “Portugal”);
User user15 = new User(15, “Abhishek”, “Singh”, “abhishek.com”, “Tanzania”);
User user16 = new User(16, “Filia”, “Withrington”, “filia.com”, “Bulgaria”);
User user17 = new User(17, “Padget”, “Cornish”, “padget.com”, “Belarus”);
User user18 = new User(18, “Olivie”, “Isabell”, “olivie.com”, “Greece”);
User user19 = new User(19, “John”, “Partlett”, “john.com”, “Argentina”);
User user20 = new User(20, “Tabbie”, “Cartan”, “tabbie.com”, “Singapore”);

userList.add(user1);
userList.add(user2);
userList.add(user3);
userList.add(user4);
userList.add(user5);
userList.add(user6);
userList.add(user7);
userList.add(user8);
userList.add(user9);
userList.add(user10);
userList.add(user11);
userList.add(user12);
userList.add(user13);
userList.add(user14);
userList.add(user15);
userList.add(user16);
userList.add(user17);
userList.add(user18);
userList.add(user19);
userList.add(user20);
}

public User getUser(int id) {
return userList.get(id);
}

public User addUser(User user) {
userList.add(user);
return user;
}

public User updateUser(User user) {
userList.set(user.getId(), user);
return user;
}

public void deleteUser(int id) {
userList.remove(id);
}

public List<User> getAllUsers() {
Collection<User> c = userList.stream().collect(Collectors.toList());
List<User> list = new ArrayList<User>();
list.addAll(c);
return list;
}
}

And now we have a rest controller to expose api to the end users

package com.abhishek.spring.boot.controller;

import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
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.RestController;

import com.abhishek.spring.boot.dao.UserDao;
import com.abhishek.spring.boot.model.User;

@RestController
@RequestMapping(“/user”)
public class UserController {

@Autowired
private UserDao userDao;

@GetMapping(“/getAllUsers”)
public List<User> getUsers() {
List<User> list = userDao.getAllUsers();
System.out.println(“All Users Fetched Successfully”);
return list;
}

@GetMapping(“/getUser/{userId}”)
public User getUser(@PathVariable(“userId”) int id) {
System.out.println(“User Fetched Successfully”);
return userDao.getUser(id);
}

@PostMapping(“/saveUser”)
public User addUser(@RequestBody User user) {
System.out.println(“Creating User: “ + user.getId());
return userDao.addUser(user);
}

@PutMapping(“/UpdateUser”)
public User updateUser(@RequestBody User user) {
System.out.println(“(Updating User: “ + user.getId());
return userDao.updateUser(user);
}

@DeleteMapping(“/DeleteUser/{userId}”)
public void deleteUser(@PathVariable(“userId”) int id) {
System.out.println(“Deleting User: “ + id);
System.out.println(“User Deleted Successfully”);
userDao.deleteUser(id);
}

}

Thanks for reading…Keep Learning

--

--