我最近遇到了類似的問題,我相信解決方案,我想出是公認的答案,不同的是我認爲值得提出來供參考。
讓我確保我的理解您的情況是正確的:
在調度上下文,你必須:
- 創建JAXB2編組
- 創建的控制器。
- 在控制器的一個,你試圖注入編組(通過註釋)
但是注射失敗。當將JAXB2 Marshaller的創建移動到根上下文時,它將起作用。
如果我你的情況描述是正確的,那麼繼續閱讀:
您所做的一切,其實是正確的:JAXB2的Marshaller和控制器豆在相同的上下文中創建(dispatcher-上下文),Controller bean應該能夠使用編組bean來注入。
問題可能出在根上下文中,您創建了另一個控制器bean。並且它是在根上下文中額外的控制器bean不能用編組注入(因爲編組bean在存在於無法訪問的子上下文中)。因此,當你將marshaller bean移動到根上下文時,一切似乎都行得通(因爲在根上下文和調度程序上下文中的Controller都可以看到marshaller bean)
常見問題是在根上下文xml中聲明component-scan
。默認情況下,component-scan
將包含在其掃描期間使用@Controller
註釋的類。這會在您的根上下文中引入另一個控制器bean。
如果是的情況下,解決方案是直接的:簡單地排除控制器在根上下文分量掃描(並且僅包括控制器在調度上下文分量掃描)
根上下文的xml:
<context:component-scan base-package="com.foo">
<context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
</context:component-scan>
調度程序上下文xml:
<context:component-scan base-package="com.foo" use-default-filters="false">
<context:include-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
</context:component-scan>
您是否在dispatcher-servlet.xml中配置了編組器? – 2014-09-12 12:15:10
Spring中沒有'UnMarshaller'類...在Spring中有'Unmarshaller'類。所以我懷疑你只是使用了錯誤的類型。 – 2014-09-12 12:29:26
@DanglingPiyush是的,我已經在dispatch-servlet.xml中配置了bean。現在我把它移到應用程序的上下文現在它的工作。謝謝 – karthik 2014-09-13 07:43:16