SPRING BOOT
Cách sử dụng Spring Scheduled trong Spring Boot Hướng dẫn CRUD với Spring Boot, REST và AngularJS trong Java Hướng dẫn Upload file với Spring Boot trong Java Hướng dẫn download file với Spring Boot trong Java Hướng dẫn Upload file với Spring Boot và jQuery Ajax trong Java Spring Boot là gì? Tại sao sử dụng Spring Boot trong Java Cài đặt Spring Boot trong Java, code một project Spring Boot cơ bản RESTful API là gì? Cách hoạt động của RESTful API trong Spring Boot RESTful API hoạt động qua giao thức HTTP như thế nào? CRUD đơn giản với RESTful API trong Spring Boot Java Các thuộc tính của Spring Boot trong Java Hướng dẫn sử dụng Thymeleaf và Spring Boot trong Java Hướng dẫn sử dụng FreeMarker với Spring Boot trong Java Hướng dẫn sử dụng JSP và Spring Boot trong Java Cách dùng Logging trong Spring Boot Kiến trúc 3layer trong Spring Boot là gì? Cách hoạt động thế nào? Hướng dẫn sử dụng Apache Tiles với Spring Boot trong Java Sử dụng nhiều ViewResolver trong Spring Boot Java Giới thiệu về Spring Boot Actuator trong ứng dụng Spring Boot Cách dùng Spring JDBC trong ứng dụng Spring Boot Java Spring Data JPA trong Spring Boot là gì? Spring Data JPA có gì hay? Tương tác giữa Spring Boot, JPA và cơ sở dữ liệu H2 Cách dùng Spring Email trong Spring Boot Sử dụng @bean trong ứng dụng Spring Boot Cách chuyển HTTP sang HTTPS trong Spring Boot Bảo mật Spring Boot RESTful Service sử dụng Basic Authentication trong Java Cách dùng Spring Security trong Spring Boot để xác thực và phân quyền Cách triển khai Spring Boot trên Tomcat Server Sử dụng JUnit để tạo unit test trong Spring Boot Cách test RESTful API trong Spring Boot Tạo ứng dụng Chat với Spring Boot và Websocket Tạo trang web đa ngôn ngữ với Spring Boot trong Java Sử dụng Twitter Bootstrap trong Spring Boot Hướng dẫn sử dụng Interceptor trong Spring Boot Cách tạo Restful Client bằng RestTemplate trong Spring Boot Cách dùng Spring Boot và MongoDB trong Java Cách dùng Spring Boot và Mustache trong Java Cách dùng Groovy trong Spring Boot Java
CÁC CHỦ ĐỀ
BÀI MỚI NHẤT
MỚI CẬP NHẬT

CRUD đơn giản với RESTful API trong Spring Boot Java

Với việc quản lý các tài nguyên thì Spring Boot có thể sử dụng RESTful API để quản lý tài nguyên rất tiện lợi và giải quyết được nhiều trở ngại mà các nhà phát triển ứng dụng đang còn gặp phải. Cho nên trong bài viết này chúng ta sẽ cùng tìm hiểu cách thức hoạt động và code một ứng dụng nhỏ sử dụng RESTful API trong Spring Boot nhé !!

test php

banquyen png
Bài viết này được đăng tại freetuts.net, không được copy dưới mọi hình thức.

Trước khi tìm hiểu về cách xây dựng một ứng dụng với RESTful API thì các bạn có thể tìm hiểu RESTful API là gì, Các phương thức sử dụng trong RESTful là các phương thức như thế nào qua hai bài viết sau:

1. Chuẩn bị

Tạo một Entity Model

Đầu tiên, bạn cần tạo một Entity Model để mô tả đối tượng mà bạn muốn thực hiện các hoạt động CRUD. Ví dụ, nếu bạn đang tạo một RESTful API để quản lý các sản phẩm, thì bạn có thể tạo một lớp Product để đại diện cho sản phẩm.

Bước 1: Tạo một Entity Model cho Product: Đầu tiên, bạn cần tạo một lớp Product để mô tả sản phẩm. Lớp Product này sẽ là một Entity Model được đánh dấu với @Entity annotation, và có các thuộc tính để mô tả các thông tin về sản phẩm, ví dụ như id, tên, mô tả, giá cả, v.v.

Bài viết này được đăng tại [free tuts .net]

Ví dụ:

@Entity
public class Product {
    
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Long id;
    
    private String name;
    private String description;
    private double price;
    
    // Constructors, getters, and setters
}

Bước 2: Tạo một interface ProductRepository để thao tác với cơ sở dữ liệu: Sau khi tạo một Entity Model, bạn cần tạo một Repository để thực hiện các hoạt động CRUD. Repository sẽ cung cấp các phương thức để lấy dữ liệu từ cơ sở dữ liệu, thêm, cập nhật hoặc xóa dữ liệu.

Ví dụ:

public interface ProductRepository extends JpaRepository<Product, Long> {

}

Bước 3: Tạo một Service cho Product: Bạn cần tạo một Service để thực hiện các hoạt động nghiệp vụ cho Product. Service sẽ cung cấp các phương thức để thêm, cập nhật hoặc xóa dữ liệu cho Product.

Ví dụ:

@Service
public class ProductService {
    
    @Autowired
    private ProductRepository productRepository;
    
    //get product by id
    public Product getProductById(Long id) {
        return productRepository.findById(id).orElse(null);
    }
}

Bước 4: Tạo một Controller cho Product: Cuối cùng, bạn cần tạo một Controller để xử lý các yêu cầu từ client. Controller sẽ cung cấp các phương thức để thực hiện các hoạt động CRUD và xử lý các yêu cầu từ client.

Ví dụ:

@RestController
@RequestMapping("/products")
public class ProductController {
    
    @Autowired
    private ProductService productService;
    
    // Get all products
    
    // Get a product by id
    
    // Add a new product

   // Delete a product

   // Update a product

2. Các bước CREATE bằng RESTful API trong Spring Boot

Để tạo mới 1 product bằng RESTful API trong Spring Boot ta cần thực hiện các bước sau:

Bước 1: Bạn cần có một lớp Product chứa đầy đủ tất cả các thông tin sản phẩm như đã tạo ở bước chuẩn bị ở phía trên

Bước 2: Tạo một phương thức POST trong ProductController để xử lý yêu cầu tạo mới sản phẩm:

Ví dụ :

@PostMapping("/")
public ResponseEntity<Product> createProduct(@RequestBody ProductRequest productRequest) {
    Product product = new Product();
    product.setName(productRequest.getName());
    product.setDescription(productRequest.getDescription());
    product.setPrice(productRequest.getPrice());
    Product createdProduct = productService.createProduct(product);
    return new ResponseEntity<>(createdProduct, HttpStatus.CREATED);
}

Bước 3: Tạo một phương thức createProduct trong ProductService để thực hiện tạo mới sản phẩm trong cơ sở dữ liệu:

Ví dụ:

public Product addProduct(Product product) {
   return productRepository.save(product);
}

3. Các bước GetAll product với RESTful API trong Spring Boot

Để thực hiện lấy tất cả các product từ cơ sở dữ liệu bằng RESTful API trong Spring Boot, ta cần thực hiện các bước sau:

Bước 1: Trong class ProductController, tạo phương thức getProducts() và chú thích nó bằng @GetMapping.

    @GetMapping("/")
    public ResponseEntity<List<Product>> getAllProducts() {
        List<Product> products = productService.getAllProducts();
        return new ResponseEntity<>(products, HttpStatus.OK);
    }

Bước 2: Trong phương thức getProducts() ở ProductService, gọi phương thức findAll() của interface ProductRepository để lấy tất cả các sản phẩm.

   public List<Product> getAllProducts() {
        return productRepository.findAll();
    }

Bước 3: Kiểm tra bằng cách xem trả về danh sách các sản phẩm bằng ResponseEntity với HttpStatus.OK.

Trong đó:

  • @GetMapping("/products") chú thích phương thức getProducts() để nó xử lý yêu cầu GET tới đường dẫn "/products".
  • productRepository là một instance của interface ProductRepository đã được khởi tạo bằng @Autowired.
  • Phương thức findAll() của ProductRepository trả về danh sách các sản phẩm.
  • ResponseEntity<List<Product>> trả về danh sách các sản phẩm dưới dạng JSON.
  • HttpStatus.OK chứa mã trạng thái HTTP 200 - OK.

Sau khi đã thực hiện các bước trên, ta có thể sử dụng trình duyệt hoặc các công cụ như Postman để gửi yêu cầu GET đến địa chỉ "http://localhost:8080/products" và nhận được danh sách các sản phẩm dưới dạng JSON.

4. Các bước UPDATE với RESTful API trong Spring Boot

Để cập nhật thông tin của một sản phẩm từ cơ sở dữ liệu bằng RESTful API trong Spring Boot, ta cần thực hiện các bước sau:

Bước 1: Trong class ProductController, tạo phương thức updateProduct() và chú thích nó bằng @PutMapping.

Bước 2: Trong phương thức updateProduct(), gọi phương thức findById() của interface ProductRepository để tìm sản phẩm cần cập nhật.

Bước 3: Kiểm tra xem sản phẩm có tồn tại hay không. Nếu không, trả về ResponseEntity với HttpStatus.NOT_FOUND.

Ví dụ:

@PutMapping("/products/{id}")
public ResponseEntity<Product> updateProduct(@PathVariable(value = "id") Long productId,
                                             @RequestBody Product productDetails) {
    Optional<Product> optionalProduct = productRepository.findById(productId);
    if (!optionalProduct.isPresent()) {
        return new ResponseEntity<Product>(HttpStatus.NOT_FOUND);
    }

    Product product = optionalProduct.get();
    product.setName(productDetails.getName());
    product.setDescription(productDetails.getDescription());
    product.setPrice(productDetails.getPrice());

    Product updatedProduct = productRepository.save(product);
    return new ResponseEntity<Product>(updatedProduct, HttpStatus.OK);
}

Bước 4: Nếu sản phẩm tồn tại, cập nhật thông tin sản phẩm và gọi phương thức save() ở ProductService của interface ProductRepository để lưu thông tin mới vào cơ sở dữ liệu.


    public Product updateProduct(Long id, Product product) {
        Product existingProduct = productRepository.findById(id).orElse(null);
    }

Bước 5: Trả về sản phẩm đã cập nhật bằng ResponseEntity với HttpStatus.OK.

Trong đó:

  • @PutMapping("/products/{id}") chú thích phương thức updateProduct() để nó xử lý yêu cầu PUT tới đường dẫn "/products/{id}" (trong đó {id} là id của sản phẩm cần cập nhật).
  • @PathVariable(value = "id") Long productId chú thích biến productId để nó lấy giá trị của {id} trong đường dẫn.
  • @RequestBody Product productDetails chú thích biến productDetails để nó lấy thông tin sản phẩm mới từ body của yêu cầu PUT (dưới dạng JSON).
  • Phương thức findById() của ProductRepository tìm sản phẩm cần cập nhật.
  • Optional<Product> optionalProduct là một Optional để xử lý trường hợp sản phẩm không tồn tại.
  • Nếu sản phẩm không tồn tại, trả về ResponseEntity với HttpStatus.NOT_FOUND.
  • Nếu sản phẩm tồn tại, cập nhật thông tin sản phẩm và gọi phương thức save() của ProductRepository để lưu thông tin mới vào cơ sở dữ liệu.
  • Trả về sản phẩm đã cập nhật bằng ResponseEntity với HttpStatus.OK.

5. Các bước DELETE với RESTful API trong Spring Boot

Để xóa thông tin của một sản phẩm từ cơ sở dữ liệu bằng RESTful API trong Spring Boot, ta cần thực hiện các bước sau:

Bước 1: Trong class ProductController, bạn cần tạo một phương thức trong Controller của mình để xử lý yêu cầu DELETE. Phương thức này sẽ được đánh dấu bằng @DeleteMapping và có thể nhận vào một đường dẫn URI và các tham số khác tùy chọn.

Ví dụ:

@DeleteMapping("/product/{id}")
public ResponseEntity<Void> deleteProduct(@PathVariable Long id) {
    // xóa sản phẩm có id tương ứng trong cơ sở dữ liệu
    ProductService.deleteProduct(id);
    return ResponseEntity.noContent().build();
}

Bước 2: Tạo phương thức xóa dữ liệu trong Service: Sau khi đã định nghĩa phương thức DELETE trong Controller, bạn cần tạo một phương thức trong Service để xóa dữ liệu trong cơ sở dữ liệu.

Ví dụ:

public void deleteProduct(Long id) {
    ProductRepository.deleteById(id);
}

Bước 3: Cấu hình cơ sở dữ liệu: Bạn cần đảm bảo rằng cấu hình cơ sở dữ liệu của bạn cho phép xóa dữ liệu. Ví dụ, nếu bạn đang sử dụng cơ sở dữ liệu MySQL, bạn cần đảm bảo rằng người dùng mà ứng dụng của bạn sử dụng có đủ quyền để xóa dữ liệu.

Bước 4: Kiểm tra và thực hiện yêu cầu DELETE: Bạn có thể sử dụng các công cụ kiểm tra API như Postman hoặc curl để thực hiện yêu cầu DELETE và kiểm tra kết quả.

Ví dụ:

DELETE http://localhost:8080/students/1

Kết quả trả về:

HTTP/1.1 204 No Content

Trong ví dụ trên, yêu cầu DELETE sẽ xóa sản phẩm có ID là 1 trong cơ sở dữ liệu và trả về mã trạng thái HTTP 204 (No Content) để cho biết rằng yêu cầu đã được xử lý thành công và không có nội dung trả về.

6. Các câu hỏi thường gặp

CRUD là gì và nó có liên quan gì đến RESTful API?

CRUD là một thuật ngữ để chỉ các hoạt động cơ bản với cơ sở dữ liệu bao gồm tạo (Create), đọc (Read), cập nhật (Update) và xóa (Delete) dữ liệu. CRUD là một phần quan trọng của các ứng dụng web vì chúng cho phép người dùng tương tác với cơ sở dữ liệu thông qua giao diện người dùng hoặc các yêu cầu API.

RESTful API là một kiểu kiến trúc web cho phép người dùng tương tác với các tài nguyên (resource) trên máy chủ thông qua các yêu cầu HTTP như GET, POST, PUT và DELETE. RESTful API thường được sử dụng để tạo các ứng dụng web hoặc di động để lấy, tạo, cập nhật và xóa các tài nguyên từ máy chủ.

Vì vậy, CRUD và RESTful API có mối liên hệ chặt chẽ với nhau. Một RESTful API tốt thường hỗ trợ các yêu cầu CRUD để cho phép người dùng tương tác với các tài nguyên trên máy chủ. Cụ thể, GET yêu cầu để lấy dữ liệu (Read), POST để tạo mới dữ liệu (Create), PUT hoặc PATCH để cập nhật dữ liệu (Update), và DELETE để xóa dữ liệu (Delete). Vì vậy, CRUD là một phần không thể thiếu của một RESTful API.

Làm thế nào để thêm dữ liệu mới vào cơ sở dữ liệu thông qua RESTful API?

Để thêm dữ liệu mới vào cơ sở dữ liệu thông qua RESTful API, chúng ta cần sử dụng phương thức POST. Để tìm hiểu kỹ hơn bạn có thể đọc tiếp ở phần 2. Phương thức CREATE với RESTful API trong Spring Boot

Làm thế nào để lấy dữ liệu từ cơ sở dữ liệu và trả về dữ liệu dưới dạng JSON?

Để lấy dữ liệu từ cơ sở dữ liệu và trả về dưới dạng JSON thông qua RESTful API, chúng ta cần sử dụng phương thức GET.

7. Kết bài viết

Vậy ở bài viết này mình đã hướng dẫn mọi người cách viết CRUD với RESTful API đơn giản với Spring Boot. Hi vọng bài viết này sẽ có ích với mọi người.

Cùng chuyên mục:

Hướng dẫn Upload file với Spring Boot và jQuery Ajax trong Java

Hướng dẫn Upload file với Spring Boot và jQuery Ajax trong Java

Hướng dẫn download file với Spring Boot trong Java

Hướng dẫn download file với Spring Boot trong Java

Hướng dẫn Upload file với Spring Boot trong Java

Hướng dẫn Upload file với Spring Boot trong Java

Hướng dẫn CRUD với Spring Boot, REST và AngularJS trong Java

Hướng dẫn CRUD với Spring Boot, REST và AngularJS trong Java

Cách sử dụng Spring  Scheduled trong Spring Boot

Cách sử dụng Spring Scheduled trong Spring Boot

Cách dùng Groovy trong Spring Boot Java

Cách dùng Groovy trong Spring Boot Java

Cách dùng Spring Boot và Mustache trong Java

Cách dùng Spring Boot và Mustache trong Java

Cách dùng Spring Boot và MongoDB trong Java

Cách dùng Spring Boot và MongoDB trong Java

Cách tạo Restful Client bằng RestTemplate trong Spring Boot

Cách tạo Restful Client bằng RestTemplate trong Spring Boot

Hướng dẫn sử dụng Interceptor trong Spring Boot

Hướng dẫn sử dụng Interceptor trong Spring Boot

Sử dụng Twitter Bootstrap trong Spring Boot

Sử dụng Twitter Bootstrap trong Spring Boot

Tạo trang web đa ngôn ngữ với Spring Boot trong Java

Tạo trang web đa ngôn ngữ với Spring Boot trong Java

Tạo ứng dụng Chat với Spring Boot và Websocket

Tạo ứng dụng Chat với Spring Boot và Websocket

Sử dụng JUnit để tạo unit test trong Spring Boot

Sử dụng JUnit để tạo unit test trong Spring Boot

Cách triển khai Spring Boot trên Tomcat Server

Cách triển khai Spring Boot trên Tomcat Server

Cách test RESTful API trong Spring Boot

Cách test RESTful API trong Spring Boot

Cách dùng Spring Security trong Spring Boot để xác thực và phân quyền

Cách dùng Spring Security trong Spring Boot để xác thực và phân quyền

Duyệt cây nhị phân bằng phương pháp inOder trong Java

Duyệt cây nhị phân bằng phương pháp inOder trong Java

Xóa node của cây nhị phân tìm kiếm trong Java

Xóa node của cây nhị phân tìm kiếm trong Java

Bảo mật Spring Boot RESTful Service sử dụng Basic Authentication trong Java

Bảo mật Spring Boot RESTful Service sử dụng Basic Authentication trong Java

Top