Nhiều lập trình Spring Boot còn phân vân giữa @PathVariable khác gì với @RequestParam, và @ModelAttribute khác gì với @RequestBody. Bài viết này sẽ ví dụ để các bạn thấy rõ sự khác biệt. Tải về mã nguồn minh hoạ
1. @PathVariable khác gì với @RequestParam
- @PathVariable là annotation để lấy tham số là một thành phần của đường dẫn. Ví dụ http://acme.com/book/5 thì 5 là thành phần dùng làm tham số
- @RequestParam là annotation để lấy tham số là biến trong query string. Ví dụ http://acme.com/book?id=5 thì id=5
1.1 @PathVariable
@GetMapping("/book/{id}")
public String getBookByPath(@PathVariable("id") int id) {
return "Book id = " + id;
}
1.2 @RequestParam
@GetMapping("/bookquery")
public String getBookByQuery(@RequestParam(value = "id", required = true) int id) {
return "Book id = " + id;
}
2. @ModelAttribute khác gì với @RequestBody
Khi viết hàm hứng post request sẽ có hai khả năng:
- Một HTML form tạo ra post request. @ModelAttribute dùng để hứng dữ liệu dạng form.
- Một ứng dụng di động, hay ứng dụng web client side render kiểu React, Vue, Angular gửi post request dạng JSON. @RequestBody dùng để hứng dữ liệu dạng JSON.
Để ví dụ tôi định nghĩa một class TransferRequest như sau
import lombok.Data;
@Data
public class TransferRequest {
private long from;
private long to;
private long amount;
}
2.1 @ModelAttribute hứng một post request dạng form data
@PostMapping("/transferform")
public String transferform(@ModelAttribute TransferRequest request) {
return request.toString();
}
2.2 @RequestBody hứng một post request dạng json
@PostMapping("/transferjson")
public String transferjson(@RequestBody TransferRequest request) {
return request.toString();
}
Bình luận