Giới thiệu về Content-Type trong HTTP và ứng dụng trong Spring MVC

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 HTML
  • text/plain: Văn bản thuần
  • image/jpeg: Hình ảnh JPEG
  • application/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ự.

Thẻ: http MIME SpringMVC Content-Type

Đăng vào ngày 14 tháng 9 lúc 19:17