In this tutorial, you will learn to build a simple REST API web service example in Spring Boot by using Spring Web MVC with JPA, Hibernate and HSQL
What you'll need
- Your favorite IDE
- JDK 8+ or OpenJDK 8+
- Maven 3+
Init project structure
You can create and init a new Spring Boot project by using Spring CLI or Spring Initializr. Learn more about using these tools at here
The final project structure as below
├── src
│ └── main
│ ├── java
│ │ └── com
│ │ └── hellokoding
│ │ └── springboot
│ │ └── restful
│ │ ├── product
│ │ │ ├── Product.java
│ │ │ ├── ProductAPI.java
│ │ │ ├── ProductRepository.java
│ │ │ └── ProductService.java
│ │ └── Application.java
│ └── resources
│ └── application.properties
└── pom.xml
Project dependencies
Add Spring Web MVC into your project as a dependency on pom.xml or build.gradle file. In Spring Boot project, you can add the dependency spring-boot-starter-web
. The library versions can be omitted as it is resolved by the parent pom provided by Spring Boot
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
We also need Spring Data JPA and HSQL Java Client dependencies for working with the HSQL database
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>org.hsqldb</groupId>
<artifactId>hsqldb</artifactId>
</dependency>
You can find the full pom.xml file as below
Define JPA Entity and Repository
ProductRepository
extends Spring Data JPA's JpaRepository
to provide the common CRUD functions such as findAll
, findById
, saveAll
, save
, deleteById
to the underlying database
Define Service and REST APIs
In Spring, you can use @Controller
or @RestController
class annotation to indicate a handler for HTTP requests
@RestController
is a shorthand for @Controller
and @ResponseBody
@ResponseBody
indicates handler methods return value will be serialized as JSON and bind to the web response body
@RequestMapping
class annotation maps HTTP requests with end point /api/v1/products
to all handler methods in ProductAPI
class
@RequestBody
indicates HTTP request body in JSON string format will be converted to the parameter object
@GetMapping
, @PostMapping
, @PutMapping
, @DeleteMapping
indicate HTTP GET, POST, PUT, DELETE request handlers respectively
@PathVariable
maps the handler parameter with the URI variable
Config and Run
Application Configurations
Run the application with JDK/OpenJDK and Maven
Type the below command at the project root directory
mvn clean spring-boot:run
Test your REST APIs with curl
Create a new product
curl -i -H "Content-Type: application/json" -X POST -d '{"name":"Hello Koding","description": "Simple coding examples and tutorials","price":"1"}' http://localhost:8080/api/v1/products
Find all products
curl -i http://localhost:8080/api/v1/products