Để quy định định dạng dữ liệu mà một request có thể process khi người dùng request tới, ví dụ như định dạng dữ liệu JSON, chúng ta có thể sử dụng annotation @RequestMapping với thuộc tính consumes trong Spring MVC. Cụ thể như thế nào? Chúng ta hãy cùng nhau tìm hiểu trong bài viết này nhé các bạn!
Đầu tiên, mình sẽ tạo một Maven project để làm ví dụ:
Bạn nào chưa biết cách tạo thì làm theo hướng dẫn của bài viết này nhé các bạn!
Các dependencies mặc định mình đã thay đổi version như sau:
1 2 3 4 5 6 7 8 9 |
<properties> <maven.compiler.source>21</maven.compiler.source> <maven.compiler.target>21</maven.compiler.target> <org.springframework-version>6.1.10</org.springframework-version> <org.slf4j-version>2.0.13</org.slf4j-version> <org.junit-version>5.10.2</org.junit-version> <jakarta.servlet-api-version>6.1.0</jakarta.servlet-api-version> </properties> |
Để chạy project này, mình sẽ sử dụng Maven Jetty Plugin:
1 2 3 4 5 |
<plugin> <groupId>org.eclipse.jetty</groupId> <artifactId>jetty-maven-plugin</artifactId> <version>11.0.21</version> </plugin> |
Bây giờ, mình sẽ định nghĩa mới một Controller nằm trong package com.huongdanjava.springmvcrequestmapping với tên gọi là HelloController. Controller này chỉ chấp nhận process những request mà định dạng dữ liệu là JSON. Nội dung của HelloController như sau:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
package com.huongdanjava.springmvcrequestmapping; import org.springframework.http.MediaType; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; @RestController public class HelloController { @RequestMapping(value = "/hello", consumes = MediaType.APPLICATION_JSON_VALUE) public String hello() { return "Hello World!"; } } |
Lúc này, nếu các bạn sử dụng Postman để request tới URL này với phương thức GET và không truyền thêm gì cả thì các bạn sẽ nhận về kết quả như sau:
Để giải quyết lỗi này, bắt buộc các bạn phải sửa phần header của request bằng cách thêm thuộc tính Content-Type=application/json. Khi đó, request của chúng ta sẽ không còn lỗi nữa.
vanhanh
Anh cho em hỏi là em đoc hai cái produces và consumes thấy nó rất giống nhau
Anh có thể chỉ cho em sự khác biệt và khi nào thì sử dụng produces khi nào sử dụng consumes được không ạ?
Em cảm ơn!
Khanh Nguyen
Khác nhau chứ em, produces định nghĩa định dạng dữ liệu sẽ trả về cho user, còn consumes là định dạng dữ liệu khi user request tới em nhé!