post-image

Sử dụng API REST Java 11, Spring 5 & Spring Boot 2.2

REST API Spring Boot Starters & Common Configurations Tổng quan

Trong hướng dẫn này, các bạn sẽ học được cách xây dựng ứng dụng web REST API đầu tiên với Java 11, Spring 5Spring Boot 2.2. Chúng ta sẽ dùng IntelliJ làm IDE nhé.

Khởi tạo ứng dụng API REST Spring Boot 2.2 với Spring Initializr

Trong ví dụ này, tôi sẽ sử dụng Spring MVC và một server Tomcat.

Giới thiệu về Spring 5

  • Spring là một Framework phát triển các ứng dụng Java được sử dụng bởi hàng triệu lập trình viên. Nó giúp tạo các ứng dụng có hiệu năng cao, dễ kiểm thử, sử dụng lại code…
  • Spring nhẹ và trong suốt (nhẹ: kích thước nhỏ, version cơ bản chỉ khoảng 2MB; trong suốt: hoạt động một cách trong suốt với lập trình viên)

Tổng hợp 200+ tài liệu, sách, bài thực hành, video hướng dẫn lập trình… từ cơ bản đến nâng cao

  • Spring là một mã nguồn mở, được phát triển, chia sẻ và có cộng đồng người dùng rất lơn.
  • Spring Framework được xây dựng dựa trên 2 nguyên tắc design chính là: Dependency Injection và Aspect Oriented Programming.

Vậy Spring Dependency Injection là gì?

Theo Wikipedia:

“Trong kỹ thuật phần mềm, dependency injection là một kỹ thuật theo đó một đối tượng (hoặc static method) cung cấp các phụ thuộc của đối tượng khác. Một phụ thuộc là một đối tượng có thể được sử dụng (service).”

Trước khi nói về dependency injection, hãy hiểu xem dependency trong lập trình nghĩa là gì trước.

Khi mà class A sử dụng một số chức năng của class class B, thì có thể nói là class A có quan hệ phụ thuộc với class B.

Trong java, trước khi ta có thể sử dụng method của class khác, ta phải khởi tạo một object của class đấy (hay A cần phải tạo 1 thực thể của B). Vậy ta có thể hiểu, việc chuyển giao nhiệm vụ khởi tạo object đó cho một ai khác và trực tiếp sử dụng các dependency đó được gọi là dependency injection.

Hay nói một cách chính xác và khách quan hơn là:

THAM GIA KHÓA HỌC LẬP TRÌNH

Dependency injection (DI) là một kỹ thuật lập trình giúp tách một class độc lập với các biến phụ thuộc. Với lập trình hướng đối tượng, chúng ta hầu như luôn phải làm việc với rất nhiều class trong một chương trình. Các class được liên kết với nhau theo một mối quan hệ nào đó. Dependency là một loại quan hệ giữa 2 class mà trong đó một class hoạt động độc lập và class còn lại phụ thuộc bởi class kia.

Spring 5 JDK Requirements

Kể từ Spring Framework 5.1, Spring yêu cầu JDK 8+ (Java SE 8+) và cung cấp hỗ trợ sẵn có cho JDK 11 LTS.

Spring Boot cho phép bạn nhanh chóng thiết lập và chạy với Spring framework. Nó cung cấp một phương pháp tiếp cận kiên định để xây dựng một ứng dụng Spring.

TÀI LIỆU HỌC LẬP TRÌNH

Prerequisites

  • Cài đặt Java 11.
  • Gradle 4.10+ hoặc Maven 3.8.1.
  • IntelliJ IDE.
  • Có kiến thức cơ bản về Java.

Initializing a Spring 5 Project

Bây giờ hãy bắt đầu bằng cách tạo một dự án Spring 5. Tôi sẽ sử dụng trình tạo Spring Initializr chính thức thông qua web interface của nó.

spring-initializr

Spring Boot 2.2 Starters for Building REST APIs

Spring Boot starters giúp bạn nhanh chóng tạo các dự án Spring Boot mà không cần trải qua quá trình quản lý phụ thuộc tẻ nhạt.

Nếu bạn muốn build một web app REST API, bạn cần thêm các dependency như Spring MVC, Tomcat và Jackson. Trình khởi tạo tự động sẽ cho phép bạn thêm một dependency duy nhất thay vì thêm thủ công tất cả các dependency này. Trong ví dụ này, tôi sẽ thêm trình khởi tạo web (spring-boot-starter-web) qua UI.

Sau khi khởi tạo xong project ở bước phía trước đó, hãy chọn GENERATE để tải về project đã tạo.

Spring 5 Application

AirbnbApplication.java:

package com.hoangducduy.airbnb; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; @SpringBootApplication public class AirbnbApplication { public static void main(String[] args) { SpringApplication.run(AirbnbApplication.class, args); } }
Code language: JavaScript (javascript)

Đầu tiên chúng ta import SpringApplication và SpringBootApplication từ các package tương ứng. Tiếp theo chúng ta khai báo một class Java và một annotation @SpringBootApplication. Trong hàm main() của class, gọi method run() của Spring Boot từ SpringApplication để khởi chạy ứng dụng Spring 5.

@SpringBootApplication là một annotation viết tắt gọi tất cả các chú thích sau:

  • @Configuration: tạo ra class, là source định nghĩa bean cho application context.
  • @EnableAutoConfiguration: là một annotation config Spring Boot để thêm các bean dựa trên cài đặt classpath và bất kỳ cài đặt thuộc tính nào.
  • @EnableWebMvc: thông thường thì bạn sẽ cần thêm annotation @EnableWebMVC cho ứng dụng Spring MVC, nhưng Spring Boot đã tự động thêm nó khi tìm spring-mvc được tìm thấy trên classpath. Annotation này giúp nó hiểu đây là một ứng dụng web.
  • @ComponentScan: annotation này cấu hình giúp Spring tìm các componnent khác trong package com.hoangducduy.airrbnb. Trong phần tiếp theo, chúng ta sẽ xem cách thêm một controller class và Spring sẽ tự động tìm nó mà không cần thêm bất kỳ cấu hình nào.

Serving our Spring 5 Application with the Embedded Tomcat Server

console log

Từ output, bạn cũng sẽ thấy Server Tomcat đưuọc start và với port là 8080. Truy cập http://localhost:8080/ trên browser:

Tạo Spring 5 REST Controller đầu tiên

FirstController.java:

package com.hoangducduy.airbnb.controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; @RestController public class FirstController { @RequestMapping("/") public String index() { return "Hello Spring Boot!"; } }
Code language: CSS (css)

Đây chỉ là một class java đơn giản, được gắn annotation @RestController, giúp Spring MVC sẵn sàng sử dụng để xử lý các request HTTP.

Tôi đã thêm method index() được gắn @RequestMapping để ánh xạ tới địa chỉ http://localhost:8080/ , sau khi truy cập đường dẫn thì sẽ thấy “Hello Spring Boot!“.

Bây giờ stop và run lại ứng dụng nhé. bạn sẽ thấy “Hello Spring Boot!“. Chúc bạn thành công và tạo được ứng dụng web đầu tiên nhé.

Source code: Github.

Các bài viết liên quan:

Leave a Reply

Your email address will not be published. Required fields are marked *