Bài viết này sẽ giải thích các loại Content-Type được sử dụng trong HTTP và cách áp dụng chúng trong Spring MVC để quản lý các yêu cầu gửi lên.
1. Content-Type
MIME type, hay còn gọi là Internet Media Type, dùng để chỉ định loại dữ liệu truyền tải qua giao thức HTTP thông qua header Content-Type.
Cấu trúc: type/subtype(;parameter)?
- Type: Loại chính, ví dụ như text, image, application. Dấu hoa thị (*) đại diện cho tất cả các loại.
- Subtype: Loại phụ, ví dụ html, plain, xml. Dấu hoa thị cũng có thể được dùng để đại diện cho tất cả.
- Parameter: Các tham số tùy chọn, ví dụ charset=UTF-8.
Ví dụ: Content-Type: text/html; charset=utf-8
Một số dạng MIME phổ biến:
text/html: Định dạng HTMLtext/plain: Văn bản thuầnimage/jpeg: Hình ảnh JPEGapplication/json: Dữ liệu JSON
2. Sử dụng Content-Type trong Spring MVC
Trong Spring MVC, bạn có thể sử dụng annotation @RequestMapping để xử lý các yêu cầu dựa trên Content-Type.
@Target({ElementType.METHOD, ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface RequestMapping {
String[] value() default {};
RequestMethod[] method() default {};
String[] params() default {};
String[] headers() default {};
String[] consumes() default {};
String[] produces() default {};
}value: Địa chỉ URL cụ thể.
method: Phương thức HTTP (GET, POST, PUT, DELETE).
consumes: Chỉ định kiểu nội dung mà request chấp nhận.
produces: Chỉ định kiểu nội dung mà response trả về.
3. Ví dụ thực tế
3.1 Headers
@RequestMapping(value = "/test", method = RequestMethod.GET, headers="Referer=http://example.com/")
public void testHeaders() {
// Thực hiện chức năng ở đây
}Ở đây, header "Referer" phải chứa giá trị "http://example.com/" thì yêu cầu mới được xử lý.
3.2 Params
@RequestMapping(value = "/find/{userId}", method = RequestMethod.GET, params="param=myValue")
public void findUser(@PathVariable String userId) {
// Thực hiện chức năng ở đây
}Chỉ xử lý yêu cầu nếu có tham số "param" với giá trị "myValue".
3.3 Consumes/Produces
@Controller
@RequestMapping(value = "/users", method = RequestMethod.POST, consumes="application/json", produces="application/json")
@ResponseBody
public List<User> addUser(@RequestBody User user) {
// Thực hiện chức năng ở đây
return new ArrayList<>();
}Xử lý yêu cầu khi Content-Type của request là "application/json" và trả về dạng JSON tương tự.