In this tutorial we will learn how to create a basic front-end with Vue.js and Axios to access a Spring Boot REST Service.
Vue.js is one of the most widely used JavaScript frames for creating web interfaces and single page applications. This guide covers a basic example of a Spring Boot application which uses Vue.js and Axios as front-end
First of all, we need a Spring Boot project which has the following dependencies:
<parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.1.9.RELEASE</version> <relativePath/> <!-- lookup parent from repository --> </parent> <groupId>com.example</groupId> <artifactId>demo-vue</artifactId> <version>0.0.1-SNAPSHOT</version> <name>demo</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-test</artifactId> <scope>test</scope> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-test</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-thymeleaf</artifactId> </dependency> <dependency> <groupId>io.rest-assured</groupId> <artifactId>rest-assured</artifactId> <version>3.0.7</version> <scope>test</scope> </dependency> </dependencies>
Then, we will add the following Classes to our Project:
A Customer.java Class:
package com.example.testrest; public class Customer { private int id; private String name; private String surname; public String getSurname() { return surname; } public void setSurname(String surname) { this.surname = surname; } public Customer(int id, String name, String surname) { super(); this.id = id; this.name = name; this.surname = surname; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getId() { return id; } public void setId(int id) { this.id = id; } }
A CustomerController.java Class:
package com.example.testrest; import java.util.List; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; @RestController public class CustomerController { @Autowired CustomerRepository repository; @RequestMapping("/list") public List<Customer> findAll() { return repository.getData(); } @RequestMapping("/one/{id}") public Customer findOne(@PathVariable int id) { return repository.getData().get(id); } }
A CustomerRepository.java Class:
package com.example.testrest; import org.springframework.stereotype.Component; import javax.annotation.PostConstruct; import java.util.ArrayList; import java.util.List; @Component public class CustomerRepository { List<Customer> customerList = new ArrayList<Customer>(); @PostConstruct public void init() { customerList.add(new Customer(1, "Fred", "Flinstone")); customerList.add(new Customer(2, "Barney", "Rubble")); customerList.add(new Customer(2, "Wilma", "Flinstone")); customerList.add(new Customer(2, "Bettey", "Rubble")); customerList.add(new Customer(2, "Bamm", "Bamm")); } public List<Customer> getData() { return customerList; } }
And a DemoApplication.java Class:
package com.example.testrest; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; @SpringBootApplication public class DemoApplication { public static void main(String[] args) { SpringApplication.run(DemoApplication.class, args); } }
Within the resources/templates folder, we will add the following index.html page which uses a combination of Vue.js and Axios to iterate over the list of Customer:
<body> <div id="app"> <table class="blueTable"> <thead > <tr> <th>#</th> <th>Name</th> <th>Surname</th> </tr> </thead> <tbody> <tr v-for="user in users" :key="user.id"> <td>{{user.id}}</td> <td>{{user.name}}</td> <td>{{user.surname}}</td> </tr> </tbody> </table> </div> <script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.5.17/vue.js"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/axios/0.19.0/axios.min.js"></script> <script> new Vue({ el: "#app", data() { return { users: [] } }, mounted: function() { axios .get('http://localhost:8080/list') .then(response => { this.users = response.data }) .catch(function (error) { console.log(error); }) } }) </script>
Run the Application with:
mvn install spring-boot:run
And here’s our Vue.js and Axios front-end in action:
That’s it. Enjoy your Spring Boot + Vue.js + Axios application!
Source code for this tutorial: https://github.com/fmarchioni/masterspringboot/tree/master/front-ends/vue
Found the article helpful? if so please follow us on Socials