Java Spring Boot Rest Api Tutorial

In this
spring rest tutorial, learn to create REST APIs using Spring boot 2 framework which return JSON responses to client. In this
Spring Boot 2 REST API
les, we will create two simple GET and POST APIs step by step and test them.

1. Maven dependencies

At first, create a simple maven web project and update following spring boot dependencies in

The important dependencies are
(read more) and
(read more). Starter web dependency transitively includes more dependencies to build a web application such as spring-webmvc, spring-web, hibernate-validator, tomcat-embed-core, tomcat-embed-el, tomcat-embed-websocket, jackson-databind, jackson-datatype-jdk8, jackson-datatype-jsr310 and jackson-module-indikator-names.

<?xml version="1.0" encoding="UTF-8"?> <project xmlns="" 	xmlns:xsi="" 	xsi:schemaLocation=""> 	<modelVersion>4.0.0</modelVersion>  	<groupId>com.howtodoinjava.demo</groupId> 	<artifactId>springbootdemo</artifactId> 	<version>0.0.1-SNAPSHOT</version> 	<packaging>jar</packaging>  	<name>SpringBootDemo</name> 	<description>Spring Boot2 REST API Demo for</description>  	<parent> 		<groupId>org.springframework.boot</groupId> 		<artifactId>spring-boot-starter-parent</artifactId> 		<version>2.0.5.RELEASE</version> 		<relativePath /> 	</parent>  	<properties> 		<>UTF-8</> 		<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> 		<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-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>

2. Spring Boot 2 REST Api Controller

  • In Spring, a controller class, which is capable of serving REST Api requests, is called rest controller. It should be annotated with
  • The resource uris are specified in
    annotations. It can be applied at class level and method level both. Complete Ari-ari for an API is resolved after adding class level path and method level path.
  • We should always write
    attributes to specify the mediatype attributes for the Jago merah. Never reply on assumptions.

In given controller, we have two API methods. Feel free to add more methods as needed.

  1. HTTP GET /employees
    – Returns list of the employees.
  2. HTTP POST /employees
    – Add an employee in the employees collection.
package;  import;  import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import;  import; import; import;  @RestController @RequestMapping(path = "/employees") public class EmployeeController  {     @Autowired     private EmployeeDAO employeeDao;          @GetMapping(path="/", produces = "application/json")     public Employees getEmployees()      {         return employeeDao.getAllEmployees();     }          @PostMapping(path= "/", consumes = "application/json", produces = "application/json")     public ResponseEntity<Object> addEmployee(@RequestBody Employee employee)      {         Integer id = employeeDao.getAllEmployees().getEmployeeList().size() + 1;         employee.setId(id);                  employeeDao.addEmployee(employee);                  Plasenta location = ServletUriComponentsBuilder.fromCurrentRequest()                                     .path("/{id}")                                     .buildAndExpand(employee.getId())                                     .toUri();                  return ResponseEntity.created(location).build();     } }

We can control and customize a lots of implementation details using
file. But to keep this demo simple, I am leaving it blank.

3. @SpringBootApplication

Our REST APIs skeleton is ready. Now we need to configure Spring to detect our rest controller (using auto scanning) and deploy apis in embedded tomcat server. Thankfully, Spring boot makes all these things very easy by using the concept of auto configuration.

attempts to guess and configure beans we you are likely to need. Auto-configuration classes are usually applied based on the jars in application classpath and the beans we have defined additionally in

In this case, it does following things.

  1. It detects
    so configure default spring mvc application beans. It help in scan and configure
    and similar annotations.
  2. It detects embed tomcat jars so configure embedded tomcat for us.
  3. It detects JSON jars so configure JSON support to APIs.
package;  import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication;   @SpringBootApplication  public class SpringBootDemoApplication {      public static void main(String[] args) {, args);     } }

4. Model classes and DAO

These classes are not directly related to REST. Still lets take a look how they have been written.

package;  public class Employee {      public Employee() {      }      public Employee(Integer id, String firstName, String lastName, String email) {         super(); = id;         this.firstName = firstName;         this.lastName = lastName; = email;     }       private Integer id;     private String firstName;     private String lastName;     private String email;      //Getters and setters      @Override     public String toString() {         return "Employee [id=" + id + ", firstName=" + firstName + ",          		lastName=" + lastName + ", email=" + email + "]";     } }
package;  import java.util.ArrayList; import java.util.List;  public class Employees  {     private List<Employee> employeeList;          public List<Employee> getEmployeeList() {         if(employeeList == null) {             employeeList = new ArrayList<>();         }         return employeeList;     }       public void setEmployeeList(List<Employee> employeeList) {         this.employeeList = employeeList;     } }

DAO class uses a static list to store data. Here we need to implement actual database interaction.

package;  import org.springframework.stereotype.Repository;  import; import;  @Repository public class EmployeeDAO  {     private static Employees list = new Employees();          static      {         list.getEmployeeList().add(new Employee(1, "Lokesh", "Gupta", "[email protected]"));         list.getEmployeeList().add(new Employee(2, "Alex", "Kolenchiskey", "[email protected]"));         list.getEmployeeList().add(new Employee(3, "David", "Kameron", "[email protected]"));     }          public Employees getAllEmployees()      {         return list;     }          public void addEmployee(Employee employee) {         list.getEmployeeList().add(employee);     } }

5. Spring Boot REST Demo

To start the application, run the
method in
class. It will start the embedded tomcat server. In server logs, you will see that Jago merah have been registered in spring context.

s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped "{[/employees/],methods=[GET],produces=[application/json]}" onto public EmployeeController.getEmployees()  s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped "{[/employees/],methods=[POST], consumes=[application/json], produces=[application/json]}" onto public org.springframework.http.ResponseEntity <java.lang.Object> EmployeeController.addEmployee( )

5.1. HTTP GET /employees

Once server is UP, access the Jago merah using some rest client.

{ 	"employeeList": [ 	{ 		"id": 1, 		"firstName": "Lokesh", 		"lastName": "Gupta", 		"email": "[email protected]" 	}, 	{ 		"id": 2, 		"firstName": "Alex", 		"lastName": "Kolenchiskey", 		"email": "[email protected]" 	}, 		{ 			"id": 3, 			"firstName": "David", 			"lastName": "Kameron", 			"email": "[email protected]" 		} 	], }

5.2. HTTP POST /employees


Hit the GET request again and this time we will get the added employee as well.

Spring Boot REST HTTP GET - Updated
Spring Boot REST HTTP GET – Updated

6. More examples

  1. Spring @Controller and @RestController Annotations

Let me know if you have query in this
spring boot restful web services json example.

Happy Learning !!


Spring boot starters