<!-- 配置路徑擴展名映射的媒體類型 --> <bean name="pathExtensionContentNegotiationStrategy" class="org.springframework.web.accept.PathExtensionContentNegotiationStrategy"> <constructor-arg> <props> <!-- if romePresent --> <prop key="atom">application/atom+xml</prop> <prop key="rss">application/rss+xml</prop> <!-- endif --> <!-- if jackson2Present || jacksonPresent --> <prop key="json">application/json</prop> <!-- endif --> <!-- if jaxb2Present --> <prop key="xml">application/xml</prop> <!-- endif --> </props> </constructor-arg> </bean> <!-- 配置映射媒體類型的策略 --> <bean name="mvcContentNegotiationManager" class="org.springframework.web.accept.ContentNegotiationManager"> <constructor-arg> <list> <ref bean="pathExtensionContentNegotiationStrategy" /> </list> </constructor-arg> </bean> <!-- 配置方法級別的@RequestMapping處理器 --> <bean name="requestMappingHandlerMapping" class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping"> <property name="order" value="0" /> <property name="contentNegotiationManager" ref="mvcContentNegotiationManager" /> </bean> <!-- 配置數據轉換服務,默認使用格式化數據轉換服務,能夠對日期和數字進行格式化 --> <bean name="conversionService" class="org.springframework.format.support.DefaultFormattingConversionService"> <constructor-arg index="0"> <null></null> </constructor-arg> <constructor-arg index="1"> <value>true</value> </constructor-arg> </bean> <bean name="validator" class="org.springframework.validation.beanvalidation.LocalValidatorFactoryBean"></bean> <!-- 配置數據綁定,經過轉換服務實現綁定,若是包含jsr303實現還將進行校驗 --> <bean name="webBindingInitializer" class="org.springframework.web.bind.support.ConfigurableWebBindingInitializer"> <property name="conversionService" ref="conversionService" /> <!-- if jsr303Present --> <property name="validator" ref="validator" /> <!-- endif --> </bean> <bean name="byteArrayHttpMessageConverter" class="org.springframework.http.converter.ByteArrayHttpMessageConverter"></bean> <bean name="stringHttpMessageConverter" class="org.springframework.http.converter.StringHttpMessageConverter"> <property name="writeAcceptCharset" value="false" /> </bean> <bean name="resourceHttpMessageConverter" class="org.springframework.http.converter.ResourceHttpMessageConverter"></bean> <bean name="sourceHttpMessageConverter" class="org.springframework.http.converter.xml.SourceHttpMessageConverter"></bean> <bean name="allEncompassingFormHttpMessageConverter" class="org.springframework.http.converter.support.AllEncompassingFormHttpMessageConverter"></bean> <bean name="atomFeedHttpMessageConverter" class="org.springframework.http.converter.feed.AtomFeedHttpMessageConverter"></bean> <bean name="rssChannelHttpMessageConverter" class="org.springframework.http.converter.feed.RssChannelHttpMessageConverter"></bean> <bean name="jaxb2RootElementHttpMessageConverter" class="org.springframework.http.converter.xml.Jaxb2RootElementHttpMessageConverter"></bean> <bean name="mappingJackson2HttpMessageConverter" class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter"></bean> <bean name="mappingJacksonHttpMessageConverter" class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter"></bean> <!-- 配置@RequestBody,@ResponseBody註解可用的轉換器 --> <util:list id="messageConverters" list-class="org.springframework.beans.factory.support.ManagedList.ManagedList"> <ref bean="byteArrayHttpMessageConverter" /> <ref bean="stringHttpMessageConverter" /> <ref bean="resourceHttpMessageConverter" /> <ref bean="sourceHttpMessageConverter" /> <ref bean="allEncompassingFormHttpMessageConverter" /> <!-- if romePresent --> <ref bean="atomFeedHttpMessageConverter" /> <ref bean="rssChannelHttpMessageConverter" /> <!-- endif --> <!-- if jaxb2Present --> <ref bean="jaxb2RootElementHttpMessageConverter" /> <!-- endif --> <!-- if jackson2Present --> <ref bean="mappingJackson2HttpMessageConverter" /> <!-- endif --> <!-- if jacksonPresent --> <ref bean="mappingJacksonHttpMessageConverter" /> <!-- endif --> </util:list> <!-- 將任意類型的Controller適配爲Handler --> <bean name="requestMappingHandlerAdapter" class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter"> <property name="contentNegotiationManager" ref="mvcContentNegotiationManager" /> <property name="webBindingInitializer" ref="webBindingInitializer" /> <property name="messageConverters" ref="messageConverters" /> </bean> <!-- 這個攔截器暴露轉換器服務讓spring:bind和spring:eval標籤可用 --> <bean name="csInterceptor" class="org.springframework.web.servlet.handler.ConversionServiceExposingInterceptor"> <constructor-arg index="0"> <ref bean="conversionService" /> </constructor-arg> </bean> <!-- 如今全部攔截器都必須設定響應的路徑映射 --> <bean name="mappedCsInterceptor" class="org.springframework.web.servlet.handler.MappedInterceptor"> <constructor-arg index="0"> <null></null> </constructor-arg> <constructor-arg index="1"> <ref bean="csInterceptor" /> </constructor-arg> </bean> <!-- 使用@ExceptionHandler註解的方法來處理Exception,優先級爲0(最高) --> <bean name="exceptionHandlerExceptionResolver" class="org.springframework.web.servlet.mvc.method.annotation.ExceptionHandlerExceptionResolver"> <property name="contentNegotiationManager" ref="mvcContentNegotiationManager" /> <property name="messageConverters" ref="messageConverters" /> <property name="order" value="0" /> </bean> <!-- 若是拋出的Exception類帶有@ResponseStatus註解,響應返回該註解的Http狀態碼,優先級爲1 --> <bean name="responseStatusExceptionResolver" class="org.springframework.web.servlet.mvc.annotation.ResponseStatusExceptionResolver"> <property name="order" value="1" /> </bean> <!-- SpringMvc內部異常處理 --> <bean name="defaultExceptionResolver" class="org.springframework.web.servlet.mvc.support.DefaultHandlerExceptionResolver"> <property name="order" value="2" /> </bean>