2012-04-02 56 views
2

我正在配置我的Spring MVC 3.1.1應用程序,總結如下。日誌記錄顯示'MyArgumentResolver.resolveArgument'在'MyInterceptor.preHandle'之前被調用。當在舊的時尚配置中使用這兩種配置(具有明確定義的AnnotationMethodHandlerAdapter bean等)時,它們將被調用,反之亦然。我讀了< mvc:註釋驅動的>在某種程度上至關重要,因爲它的配置不會補充mvc:namespace的其他設置。我面臨同樣的問題嗎?在攔截器之前調用的Spring Web MVC 3.1.1參數解析器

<mvc:annotation-driven> 
    <mvc:message-converters> 
    ... 
    </mvc:message-converters>  
    <mvc:argument-resolvers> 
    <bean class="[...].MyArgumentResolver"/> 
    </mvc:argument-resolvers>  
</mvc:annotation-driven> 
<mvc:interceptors> 
    <mvc:interceptor>  
    <mvc:mapping path="/home/**" /> 
    <bean class="[...].MyInterceptor" /> 
    </mvc:interceptor> 
</mvc:interceptors> 

非常感謝!

回答

8

春季3.1 < MVC:註解驅動>用來處理請求一組不同的類 - 例如,AnnotationMethodHandlerAdapter上被替換爲RequestMappingHandlerAdapter。你可以在這裏閱讀更多關於這個:http://static.springsource.org/spring/docs/3.1.x/spring-framework-reference/html/mvc.html#mvc-ann-requestmapping-31-vs-30

爲了與這些類正常工作,他們添加了一個新的HandlerMethodArgumentResolver,取代舊的WebArgumentResolver接口。不過,我相信Spring會自動嘗試「升級」舊的WebArgumentResolvers,將它們包裝在AbstractWebArgumentResolverHandlerAdapter中,這是我在升級過程中看到的行爲。 AbstractWebArgumentResolverHandlerAdapter的JavaDoc說:

注意:該類是爲了向後兼容而提供的。不過,建議將WebArgumentResolver重寫爲HandlerMethodArgumentResolver。由於supportsParameter(org.springframework.core.MethodParameter)只能通過實際解決的值,然後檢查結果執行不WebArgumentResolver#UNRESOLVED ...

逐句通過代碼後,我想可能是發生在你的案例中的是新類在攔截器中執行preHandle之前調用supportsParameter函數,但AbstractWebArgumentResolverHandlerAdapter的實現實際上調用resolveArgument方法並檢查'UNRESOLVED'作爲返回類型以確定參數解析器是否支持這個給定的論證會讓他們看起來失靈。

我懷疑如果你重寫你的參數解析器來實現新的HandlerMethodArgumentResolver接口,它會解決你的問題。

+0

許多感謝roblg。將接口更改爲[HandlerMethodArgumentResolver](http://static.springsource.org/spring/docs/3.1.x/javadoc-api/org/springframework/web/method/support/HandlerMethodArgumentResolver.html)解決了該問題。我的[WebArgumentResolver](http://static.springsource.org/spring/docs/3.1.x/javadoc-api/org/springframework/web/bind/support/WebArgumentResolver.html)期望攔截器設置一個請求屬性和拋出異常如果attr。不見了。正如你所說的,在攔截器的preHandle之前調用resolveArgument來檢查解析器是否適用。 – brainfrozen 2012-04-23 14:10:08