[英]How to get Spring 3.2's ConversionService and HttpMessageConverters to work together for @RequestBody annotation?
在AJAX流行之前,可以通過使用自定義屬性編輯器並將其注冊到控制器中來在ID和實體之間進行轉換。 因此,如果您有一個包含Company
的User
表單支持對象,如果company.id
為5,Spring將調用您的自定義屬性編輯器,以便您可以獲取ID為5
的Company並將其設置為user.company
屬性。
現在,在Ajax的處理方式中,我們有類似的要求。 而不是使用表單支持對象,我們希望對User
對象進行HTTP POST或PUT作為JSON數據,並讓Spring代表我們自動將JSON轉換為User對象。 Spring通過@RequestBody
批注以及使用Jackson來回將JSON編組到Java對象中,使這成為可能。
這只是一個虛構的例子。 想象一個User
其中包含一個帶有適當的獲取器/設置器的Company
對象。
@RequestMapping(method = RequestMethod.POST)
@ResponseStatus(HttpStatus.NO_CONTENT)
public void create(@Valid @RequestBody User user) {
userService.saveUser(user);
}
由於就Spring而言,屬性編輯器已成為過去,所以我們應該使用新的Conversion Service API。 對於我的應用程序,我已經成功創建了一個工廠,該工廠可以執行以前的舊屬性編輯器所做的工作-將id轉換回實體。
我的問題是,在Jackson封送JSON數據期間或之后,如何讓Spring調用轉換服務? 我知道可以創建一個自定義JsonDeserializer
,但是我發現編寫/測試它們是一個痛苦而漫長的過程,因為我需要對大量實體進行此操作,每個反序列化器將花費60到200行每個編碼。
如果Spring可以代表我為我做id到實體的映射,就像表單支持對象那樣,我會很喜歡。 有辦法嗎?
Deinum先生的回答很好。 但是對於實際工作,請考慮一下AOP;)在您的問題中使用它可能會很有趣:)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.