This tutorial will walk you through the steps of creating a RESTful API web service example with Spring Boot, JPA, Hibernate, HSQL and Lombok, Unit Test with MockMVC and UI Integration with VueJS
If you are looking for a full CRUD integration of RESTful APIs and web app using Spring Boot and VueJS, try below tutorials: - Spring Boot CRUD Example with RESTful APIs, VueJS - Spring Boot CRUD Example with TodoMVC, REST APIs, VueJS
What you'll need
- JDK 8+ or OpenJDK 8+
- Maven 3+
Stack
- Spring Boot
- MockMVC
- VueJS
Init project structure and dependencies
Project structure
├── src
│ ├── main
│ │ ├── java
│ │ │ └── com
│ │ │ └── hellokoding
│ │ │ └── springboot
│ │ │ └── restful
│ │ │ ├── Application.java
│ │ │ ├── Stock.java
│ │ │ ├── StockAPI.java
│ │ │ ├── StockController.java
│ │ │ ├── StockRepository.java
│ │ │ └── StockService.java
│ │ └── resources
│ │ ├── static
│ │ │ ├── stocklist.css
│ │ │ └── stocklist.js
│ │ ├── templates
│ │ │ └── stocklist.html
│ │ └── application.properties
│ └── test
│ └── java
│ └── com
│ └── hellokoding
│ └── springboot
│ └── restful
│ └── StockAPITest.java
└── pom.xml
Project dependencies
Define JPA Entity and Repository
StockRepository extends Spring Data JPA's JpaRepository to provide CRUD functions to the underlying database such as findAll, findById, saveAll, save, deleteById
Define Service, RESTful API and Controller
@RestController is a shorthand for @Controller and @ResponseBody. @Controller indicates the class will define handlers of HTTP requests. @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/stocks to all handler methods in StockAPI class
@GetMapping, @PostMapping, @PatchMapping, and @DeleteMapping indicate HTTP GET, POST, PATCH and DELETE request handlers respectively
@PathVariable maps the handler parameter with the URI variable. @RequestBody indicates HTTP request body will be converted as JSON and bind to the handler parameter
Consume the REST API with VueJS
Config and Test
Application configurations
Define Unit tests with @WebMvcTest and MockMvc
Run the unit tests and launch the application with JDK/OpenJDK and Maven
Type the below command at the project root directory
mvn clean test spring-boot:run
Integration test with cURL
Create a new stock
curl -H "Content-Type: application/json" -X POST -d '{"name":"Stock 1","price":"1"}' http://localhost:8080/api/v1/stocks
Get all stocks
curl http://localhost:8080/api/v1/stocks
Get stock id 1
curl http://localhost:8080/api/v1/stocks/1
Update price of stock 1
curl -i -X PATCH -H "Content-Type:application/json" -d "{\"name\" : \"Stock 1 Updated\"}" http://localhost:8080/api/v1/stocks/1
Access to localhost:8080 to see the updated data on UI

If you are looking for a full CRUD integration of RESTful APIs and web app using Spring Boot and VueJS, try below tutorials: - Spring Boot CRUD Example with RESTful APIs, VueJS - Spring Boot CRUD Example with TodoMVC, REST APIs, VueJS