SBA301 - Chương 6: Spring Boot REST — annotation và xử lý request, response
Xây dựng dịch vụ REST bằng Spring Boot: GetMapping và PostMapping để ánh xạ phương thức HTTP, RequestParam cho tham số truy vấn, PathVariable cho biến đường dẫn, RequestHeader cho header tuỳ ý, RequestBody để chuyển thân yêu cầu thành đối tượng Java. Giải thích RestController đã bao hàm ResponseBody cho mọi phương thức, cách ấn định mã trạng thái bằng ResponseStatus, ResponseEntity để tự do đặt thân, mã trạng thái và header, ràng buộc kiểu dữ liệu qua consumes và produces, cùng lựa chọn giữa PUT và PATCH.
Bắt đầu bằng Chế độ học nếu bạn muốn đáp án và giải thích hiện ngay sau mỗi câu — không bấm giờ, dừng lúc nào cũng được. Chọn Thi thử khi muốn biết mình đang ở đâu: có bấm giờ, chấm điểm ở cuối, và giải thích chỉ mở sau khi nộp.
Luyện tập theo chủ đề này
Câu hỏi của chủ đề
Trong Spring Boot REST, annotation được sử dụng để trích xuất các biến đường dẫn từ URL là @PathVariable. Annotation này cho phép bạn truy cập vào các phần của URL và sử dụng chúng như là các biến trong phương thức của controller. Ví dụ, nếu bạn có một phương thức như sau: @GetMapping("/users/{id}")
public String getUser(@PathVariable Long id) {
// code here
}Trong ví dụ trên, @PathVariable được sử dụng để trích xuất giá trị của id từ URL và sử dụng nó như là một biến trong phương thức getUser.
Annotation @RequestParam được sử dụng trong Spring MVC để ánh xạ các tham số truy vấn (query parameters) trong URL đến các tham số phương thức (method parameters) của một phương thức controller. Điều này cho phép bạn dễ dàng lấy giá trị của các tham số truy vấn và sử dụng chúng trong logic của phương thức. Ví dụ, nếu bạn có một phương thức controller như sau: @GetMapping("/users")
public String getUsers(@RequestParam("name") String name, @RequestParam("age") int age) {
...
}thì @RequestParam("name") và @RequestParam("age") sẽ ánh xạ các tham số truy vấn "name" và "age" trong URL đến các tham số phương thức "name" và "age".
Để ánh xạ các yêu cầu HTTP GET đến một phương thức, chúng ta sử dụng annotation @GetMapping trong Spring. Annotation này cho phép chúng ta định nghĩa một phương thức có thể được gọi khi nhận được yêu cầu GET từ client. Ví dụ, nếu chúng ta có một phương thức như sau: @GetMapping("/users")
public List<User> getUsers() {
// logic để lấy danh sách người dùng
}Thì khi client gửi yêu cầu GET đến đường dẫn /users, phương thức getUsers() sẽ được gọi và trả về danh sách người dùng. Annotation @GetMapping là một trong những annotation quan trọng trong Spring, giúp chúng ta xây dựng các ứng dụng web hiệu quả và dễ dàng quản lý.
Để xác định một phương thức xử lý yêu cầu POST và chấp nhận cơ thể yêu cầu, bạn cần sử dụng hai annotation đặc biệt trong Spring MVC. Đầu tiên, bạn cần sử dụng @PostMapping để chỉ định phương thức xử lý yêu cầu POST. Thứ hai, bạn cần sử dụng @RequestBody để chỉ định rằng phương thức này sẽ chấp nhận cơ thể yêu cầu được gửi đi. Điều này cho phép bạn truy cập vào dữ liệu được gửi đi trong cơ thể yêu cầu. Ví dụ, nếu bạn muốn tạo một phương thức xử lý yêu cầu POST để tạo một tài khoản mới, bạn có thể sử dụng @PostMapping và @RequestBody như sau: @PostMapping("/taikhoan")
public ResponseEntity<TaiKhoan> taoTaiKhoan(@RequestBody TaiKhoan taiKhoan) {
// Xử lý tạo tài khoản
}Trong ví dụ trên, @PostMapping chỉ định phương thức xử lý yêu cầu POST, và @RequestBody chỉ định rằng phương thức này sẽ chấp nhận cơ thể yêu cầu được gửi đi.
Để tạo một điểm cuối REST chỉ chấp nhận dữ liệu XML, bạn cần sử dụng annotation @PostMapping với thuộc tính consumes được đặt thành "application/xml". Điều này cho phép Spring MVC chỉ chấp nhận yêu cầu HTTP POST có nội dung dạng XML. Ví dụ, nếu bạn muốn tạo một điểm cuối REST để tạo mới một tài nguyên, bạn có thể sử dụng annotation @PostMapping với consumes được đặt thành "application/xml" như sau: @PostMapping(consumes = "application/xml")
public ResponseEntity<Resource> createResource(@RequestBody Resource resource) {
...
}Trong ví dụ trên, điểm cuối REST sẽ chỉ chấp nhận yêu cầu HTTP POST có nội dung dạng XML, và sẽ sử dụng phương thức createResource để xử lý yêu cầu đó.
Để định nghĩa một phương thức xử lý cả hai định dạng yêu cầu và phản hồi JSON, chúng ta cần sử dụng các annotation @PostMapping, @RequestBody và @ResponseBody. @PostMapping được sử dụng để chỉ định phương thức HTTP được sử dụng để gửi yêu cầu đến server. @RequestBody được sử dụng để ánh xạ dữ liệu từ yêu cầu HTTP sang một đối tượng Java. @ResponseBody được sử dụng để ánh xạ một đối tượng Java sang dữ liệu HTTP. Ví dụ, nếu chúng ta muốn tạo một phương thức xử lý yêu cầu và phản hồi JSON, chúng ta có thể sử dụng các annotation như sau: @PostMapping(value = "/example", consumes = MediaType.APPLICATION_JSON_VALUE, produces = MediaType.APPLICATION_JSON_VALUE)
public ResponseEntity<String> example(@RequestBody String request) {
// Xử lý yêu cầu và trả về phản hồi
return ResponseEntity.ok("Phản hồi từ server");
}Bằng cách sử dụng các annotation này, chúng ta có thể định nghĩa một phương thức xử lý cả hai định dạng yêu cầu và phản hồi JSON.
Để inject một Spring Data JPA repository vào một service hoặc controller, chúng ta sử dụng annotation @Autowired. Annotation này cho phép Spring tự động inject các bean vào các field hoặc setter của class. Điều này giúp giảm thiểu sự phức tạp khi viết mã và tăng cường tính tái sử dụng của code. Ví dụ, nếu chúng ta có một interface được tạo bởi Spring Data JPA, như sau:
public interface UserRepository extends JpaRepository<User, Long> {}Thì chúng ta có thể inject nó vào một service như sau: @Service
public class UserService {@Autowired
private UserRepository userRepository;
}Trong ví dụ trên, Spring sẽ tự động inject UserRepository vào UserService.
Đề có câu hỏi của chủ đề này
2 đề chứa ít nhất một câu thuộc chủ đề — mở đề để làm cả bộ, không chỉ từng câu.