Chào các bạn, trong bài viết trước mình đã cùng các bạn tạo một "Hello World" project với Spring Boot. Nếu bạn nào muốn tham khảo có thể xem thêm tại đây
Trong bài viết tiếp theo này mình sẽ cùng các bạn tạo một RESTful Web Service đơn giản với Spring Boot. Và đây cũng chính là một trong những chức năng rất mạnh của Spring Boot.
#Chúng ta code cái gì?
Câu hỏi đặt ra RESTful Web Service là gì? Trong khuôn khổ bài viết này mình sẽ không thể giải thích cụ thể được. Các bạn nếu chưa biết thì chỉ cần hiểu đơn giản như thế này. Giả sử mình có đường dẫn đó là http://localhost:8080/framework
Khi truy cập vào đường dẫn này mình có thể nhận được một giao diện (HTML), một đoạn text bình thường như trong ví dụ Hello World bên trên.
Nhưng trong bài viết này chúng ta sẽ không trả về hai thứ đó mà nó sẽ trả về dữ liệu dưới dạng JSON (JavaScript Object Notation).
Trả về một đối tượng:
{id: 1, name: "ReactJS", language: "JavaScript"}
Trả về một danh sách các đối tượng:
[
{
"id":1,
"name":"ReactJS",
"language":"JavaScript"
},
{
"id":2,
"name":"Django",
"language":"Python"
},
{
"id":3,
"name":"SpringBoot",
"language":"Java"
}
]
Các nền tảng khác nhau (web app, mobile app...) khi nhận được data dạng JSON này sẽ đọc, chuyển đổi và hiển thị theo các cách khác nhau lên giao diện.+ IDE: Eclipse (Java EE) hoặc IntelliJ Idea (Các bạn có thể dùng bất cứ IDE nào các bạn thích)
+ JDK: Ở đây mình dùng JDK 11 (các bạn có thể dùng JDK 8 hoặc các phiên bản > JDK 11)
+ Build tools: Trong bài viết này mình sử dụng Maven (các bạn có thể sử dụng Gradle hoặc các tool tương tự)
+ Hệ điều hành: Ubuntu (version 20.04) (các bạn có thể sử dụng Window hay Mac OS với những công cụ tương ứng bên trên)
#Khởi tạo ứng dụng Spring Boot.
Mình đã có một bài viết riêng cho mục này, nếu bạn nào chưa biết thì có thể tham khảo thêm trong bài viết này.
#Code thôi nào!
Nội dung file pom.xml
mình thêm dependency spring-boot-starter-web như sau:
<?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.4.3</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.laptrinhb2a</groupId>
<artifactId>restful-web-service</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>spring-restful-web-service</name>
<description>Spring Boot Rest Service</description>
<properties>
<java.version>11</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>
Framework
với 3 thuộc tính id, name, language như bên dưới.package com.laptrinhb2a.restservice;
public class Framework {
private long id;
private String name;
private String language;
public Framework() {
}
public Framework(long id, String name, String language) {
this.id = id;
this.name = name;
this.language = language;
}
public long getId() {
return id;
}
public void setId(long id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getLanguage() {
return language;
}
public void setLanguage(String language) {
this.language = language;
}
}
Có thể nói Spring Boot bá đạo ở chỗ khi bạn trả về một object hoặc một danh sách các object nó sẽ tự động convert (chuyển đổi) đối tượng đó sang dạng JSON mà bạn không cần phải làm gì hết. package com.laptrinhb2a.restservice;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class FrameworkController {
@GetMapping("/framework")
public Framework getFramework() {
return new Framework(1, "Spring Boot", "Java");
}
}
Bây giờ các bạn chạy ứng dụng, mở trình duyệt lên truy cập vào đường dẫn http://localhost:8080/framework sẽ thấy dữ liệu trả về có dạng: {"id":1, "name":"SpringBoot", "language":"Java"}
getListFrameworks()
như sau:package com.laptrinhb2a.restservice;
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.atomic.AtomicLong;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class FrameworkController {
List<Framework> frameworks = new ArrayList<>();
public FrameworkController() {
frameworks.add(new Framework(1, "Spring Boot", "Java"));
frameworks.add(new Framework(2, "ReactJS", "JavaScript"));
frameworks.add(new Framework(3, "Django", "Python"));
}
@GetMapping("/framework")
public Framework getFramework() {
return new Framework(1, "Spring Boot", "Java");
}
@GetMapping("/frameworks")
public List<Framework> getListFrameworks() {
return frameworks;
}
}
[
{
"id":1,
"name":"Spring Boot",
"language":"Java"
},
{
"id":2,
"name":"ReactJS",
"language":"JavaScript"
},
{
"id":3,
"name":"Django",
"language":"Python"
}
]
findFrameworkByName()
như sau:package com.laptrinhb2a.restservice;
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.atomic.AtomicLong;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class FrameworkController {
List<Framework> frameworks = new ArrayList<>();
public FrameworkController() {
frameworks.add(new Framework(1, "Spring Boot", "Java"));
frameworks.add(new Framework(2, "ReactJS", "JavaScript"));
frameworks.add(new Framework(3, "Django", "Python"));
}
@GetMapping("/framework")
public Framework getFramework() {
return new Framework(1, "Spring Boot", "Java");
}
@GetMapping("/frameworks")
public List<Framework> getListFrameworks() {
return frameworks;
}
@GetMapping("/framework/{name}")
public Framework findFrameworkByName(@PathVariable String name) {
for(Framework framework: frameworks) {
if(framework.getName().equals(name)) return framework;
}
return null;
}
}
@Pathvariable
. Tác dụng của @Pathvariable
mình lấy ví dụ mình có đường dẫn http://localhost:8080/framework/ReactJS. findFrameworkByName()
và tham số name
sẽ nhận giá trị là "ReactJS"
được trích xuất từ url bên trên.{id: 1, name: "Spring Boot", language: "Java"}
Không có nhận xét nào: