Giới thiệu về RESTful trong Spring MVC
Spring MVC hỗ trợ xây dựng REST API thông qua các annotation như @RequestMapping và @PathVariable. Ví dụ, để xử lý yêu cầu DELETE tại endpoint "/user/{id}", ta có thể triển khai như sau:
@RequestMapping(value = "/user/{userId}", method = RequestMethod.DELETE)
public ResponseEntity<String> deleteUser(@PathVariable("userId") Long id) {
userService.deleteUser(id);
return new ResponseEntity<>(HttpStatus.NO_CONTENT);
}
Thay vì sử dụng query parameter truyền thống (ví dụ: /user?id=5), RESTful URL sẽ có dạng /user/5, giúp URL ngắn gọn và dễ hiểu hơn.
Cấu hình RESTful trong ứng dụng
1. Cấu hình web.xml
<web-app>
<servlet>
<servlet-name>dispatcher</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/spring-config.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>dispatcher</servlet-name>
<url-pattern>/api/</url-pattern>
</servlet-mapping>
<filter>
<filter-name>httpMethodFilter</filter-name>
<filter-class>org.springframework.web.filter.HiddenHttpMethodFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>httpMethodFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
</web-app>
Cấu hình này thiết lập DispatcherServlet để xử lý các yêu cầu REST API tại đường dẫn /api/, đồng thời kích hoạt HiddenHttpMethodFilter để hỗ trợ HTTP methods như PUT và DELETE thông qua parameter _method.
2. Thêm dependency vào pom.xml
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>5.3.20</version>
</dependency>
Đảm bảo thêm các dependency cần thiết cho Spring MVC và RESTful API trong file pom.xml.
3. Tạo REST Controller
package com.example.demo.controller;
import org.springframework.web.bind.annotation.*;
import com.example.demo.service.UserService;
@RestController
@RequestMapping("/api/users")
public class UserRestController {
private final UserService userService;
public UserRestController(UserService userService) {
this.userService = userService;
}
@DeleteMapping("/{id}")
public void removeUser(@PathVariable Long id) {
userService.deleteUser(id);
}
}
Controller này xử lý các yêu cầu DELETE tại endpoint /api/users/{id} để xóa người dùng theo ID.
4. Giao diện kiểm thử
Tạo file test.jsp với đoạn mã JavaScript để gửi yêu cầu REST:
<script>
function sendDeleteRequest() {
fetch('/api/users/7', {
method: 'DELETE'
})
.then(response => {
if (response.ok) {
alert('Xóa thành công!');
}
});
}
</script>
<button onclick="sendDeleteRequest()">Xóa người dùng</button>
Khi nhấn nút "Xóa người dùng", trình duyệt sẽ gửi yêu cầu DELETE đến endpoint RESTful và hiển thị thông báo khi thành công.
5. Kiểm tra hoạt động
- Khởi động ứng dụng tại địa chỉ http://localhost:8080/demo-app
- Nhấn nút "Xóa người dùng" để kích hoạt yêu cầu REST
- Kiểm tra log hệ thống hoặc database để xác nhận user ID 7 đã bị xóa