我正在研究Spring如何處理REST web服務和我對HttpMessageConverter的概念有一些疑問。@RequestBody註釋的工作原理以及它如何與HttpMessageConverter接口相關?
在官方文檔,我可以讀:
策略接口來指定,可以從 和HTTP請求和響應轉換器。
所以HttpMessageConverter似乎是一個接口,但究竟什麼是策略接口?是否與策略模式有關?
所以我得從什麼瞭解Spring自動默認提供註冊一些實現使用@EnableWebMvc或
當但究竟是什麼,這些實施?你能給我一個實際的例子嗎?
我認爲它的工作過程是這樣:
例如客戶端執行一個HttpRequest把這個請求JSON郵件的正文(我不是那麼實用,但我認爲我可以做一些事情像這樣),那麼處理這個HttpRequst的控制器使用HttpMessageConverter的實現來將這個JSON消息轉換爲模型對象。我認爲這也是正確的,反之亦然。
我的推理是否正確或我錯過了什麼?
另一個疑問是關於@RequestBody註釋(我認爲它與前一個主題有關)。
我有這樣的例子:
@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);
}
所以我認爲@RequestBody訂購updatedOrder採取updatedOrder輸入參數的值從身體HttpRequest中,然後用它轉換成一個訂購對象使用執行HttpMessageConverter。
這是對的還是我錯過了什麼?如果它是正確的,怎麼才能選擇正確的轉換器?
例如在這裏我發現了另一個例子類同前一個: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
}
我認爲這是明確指出,它必須使用JSON來Model對象轉換器。爲什麼在前面的例子中沒有指定?如何選擇正確的轉換器?
TNX
完美的解釋,你是一個忍者,爲你而生 – AndreaNobili