Tôi đang nghiên cứu cách Spring xử lý REST dịch vụ web và tôi có một số nghi ngờ liên quan đến khái niệm về HttpMessageConverter.Chú thích @RequestBody hoạt động chính xác như thế nào và cách nó liên quan đến giao diện HttpMessageConverter như thế nào?
Trên tài liệu chính thức tôi có thể đọc:
giao diện Chiến lược chỉ rõ một bộ chuyển đổi có thể chuyển đổi từ và các yêu cầu HTTP và câu trả lời.
Vì vậy, các HttpMessageConverter có vẻ là một giao diện nhưng những gì chính xác một giao diện chiến lược là? Có phải cái gì liên quan đến mẫu chiến lược hay không?
Vì vậy, từ những gì tôi có hiểu mùa xuân tự động cung cấp một số triển khai đăng ký theo mặc định khi sử dụng @EnableWebMvc hoặc
Nhưng chính xác những gì hiện những thực hiện? Bạn có thể cung cấp cho tôi một ví dụ thực tế?
Tôi nghĩ rằng nó hoạt động theo cách này:
Ví dụ một khách hàng thực hiện một HttpRequest đưa vào cơ thể của yêu cầu này một JSON nhắn (Tôi không quá thực tế, nhưng tôi nghĩ rằng tôi có thể làm điều gì đó như thế này), sau đó bộ điều khiển xử lý HttpRequst này sử dụng thực hiện HttpMessageConverter để chuyển đổi thông báo JSON này thành một đối tượng mô hình. Tôi nghĩ rằng đó cũng là sự thật ngược lại.
Lý do chính xác của tôi hoặc tôi thiếu gì đó?
Một nghi ngờ khác liên quan đến chú thích @RequestBody (mà tôi nghĩ rằng nó có liên quan đến chủ đề trước đó).
Tôi có ví dụ này:
@RequestMapping(value="/orders/{id}", method=RequestMethod.PUT)
@ResponseStatus(HttpStatus.NO_CONTENT) // 204
public void updateOrder(@RequestBody Order updatedOrder, @PathVariable("id") long id) {
// process updated order data and return empty response
orderManager.updateOrder(id, updatedOrder);
}
Vì vậy, tôi nghĩ rằng @RequestBody tự updatedOrder mất giá trị của updatedOrder tham số đầu vào ra khỏi cơ thể của HttpRequest và sau đó chuyển đổi nó thành một với Đặt hàng đối tượng bằng cách triển khai HttpMessageConverter.
Có đúng hay tôi đang thiếu thứ gì đó? Nếu nó là đúng như thế nào có thể chọn chuyển đổi quyền?
Ví dụ ở đây tôi tìm thấy một ví dụ khác tương tự như trước đó một: http://docs.spring.io/spring/docs/current/spring-framework-reference/html/mvc.html
@Controller
@RequestMapping(value = "/pets", method = RequestMethod.POST, consumes="application/json")
public void addPet(@RequestBody Pet pet, Model model) {
// implementation omitted
}
Tôi nghĩ rằng đây nó được quy định một cách rõ ràng rằng nó phải sử dụng một JSON để mô hình chuyển đổi OBJECT. Tại sao trong ví dụ trước không được chỉ định? Làm thế nào có thể chọn trình chuyển đổi phù hợp?
Tnx
Giải thích hoàn hảo, bạn là một ninja, dành cho bạn – AndreaNobili