一、起因
从spring 3.1.0升级到spring 3.2.0时,配置文件servlet.xml中出错。 错误信息:- java.lang.String cannot be cast to org.springframework.http.MediaType
错误原因:是spring3.2开始不推荐使用setMediaTypes等直接设置这些数据, 而是通过ContentNegotiationManager(ContentNegotiationManagerFactoryBean),所以采用map标签的方式直接转换会出现异常信息。 二、ContentNegotiatingViewResolver 解释
引用
三、配置实例 1. spring 3.1.0
- <bean class="org.springframework.web.servlet.view.ContentNegotiatingViewResolver">
- <property name="ignoreAcceptHeader" value="true"/>
- <property name="defaultContentType" value="text/html"/>
- <property name="mediaTypes">
- <map>
- <entry key="json" value="application/json" />
- <entry key="xml" value="application/xml" />
- </map>
- </property>
- <property name="viewResolvers">
- <list>
- <bean class="org.springframework.web.servlet.view.BeanNameViewResolver" />
- <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
- <property name="viewClass" value="org.springframework.web.servlet.view.JstlView"/>
- <property name="prefix" value="/WEB-INF/pages/"/>
- <property name="suffix" value=".jsp"></property>
- </bean>
- </list>
- </property>
- <property name="defaultViews">
- <list>
- <bean class="org.springframework.web.servlet.view.json.MappingJacksonJsonView" />
- <bean class="org.springframework.web.servlet.view.xml.MarshallingView" >
- <property name="marshaller">
- <bean class="org.springframework.oxm.xstream.XStreamMarshaller"/>
- </property>
- </bean>
- </list>
- </property>
- </bean>
2. spring 3.1.0/3.2.0
- <bean class="org.springframework.web.servlet.view.ContentNegotiatingViewResolver">
- <property name="ignoreAcceptHeader" value="true"/>
- <property name="defaultContentType" value="text/html"/>
- <property name="mediaTypes">
- <value>
- json=application/json,
- xml=application/xml
- </value>
- </property>
- <property name="viewResolvers">
- <list>
- <bean class="org.springframework.web.servlet.view.BeanNameViewResolver" />
- <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
- <property name="viewClass" value="org.springframework.web.servlet.view.JstlView"/>
- <property name="prefix" value="/WEB-INF/pages/"/>
- <property name="suffix" value=".jsp"></property>
- </bean>
- </list>
- </property>
- <property name="defaultViews">
- <list>
- <bean class="org.springframework.web.servlet.view.json.MappingJacksonJsonView" />
- <bean class="org.springframework.web.servlet.view.xml.MarshallingView" >
- <property name="marshaller">
- <bean class="org.springframework.oxm.xstream.XStreamMarshaller"/>
- </property>
- </bean>
- </list>
- </property>
- </bean>
3. spring 3.2.0
- <bean class="org.springframework.web.servlet.view.ContentNegotiatingViewResolver">
- <property name="ignoreAcceptHeader" value="true"/>
- <property name="defaultContentType" value="text/html"/>
- <property name="contentNegotiationManager">
- <bean class="org.springframework.web.accept.ContentNegotiationManagerFactoryBean">
- <property name="ignoreAcceptHeader" value="true"/>
- <property name="defaultContentType" value="text/html"/>
- <property name="mediaTypes">
- <map>
- <entry key="json" value="application/json" />
- <entry key="xml" value="application/xml" />
- </map>
- </property>
- </bean>
- </property>
- <property name="viewResolvers">
- <list>
- <bean class="org.springframework.web.servlet.view.BeanNameViewResolver" />
- <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
- <property name="viewClass" value="org.springframework.web.servlet.view.JstlView"/>
- <property name="prefix" value="/WEB-INF/pages/"/>
- <property name="suffix" value=".jsp"></property>
- </bean>
- </list>
- </property>
- <property name="defaultViews">
- <list>
- <bean class="org.springframework.web.servlet.view.json.MappingJacksonJsonView" />
- <bean class="org.springframework.web.servlet.view.xml.MarshallingView" >
- <property name="marshaller">
- <bean class="org.springframework.oxm.xstream.XStreamMarshaller"/>
- </property>
- </bean>
- </list>
- </property>
- </bean>
4. spring 3.2.x (推荐)
-
- <bean class="org.springframework.web.servlet.view.ContentNegotiatingViewResolver">
- <property name="ignoreAcceptHeader" value="true"/>
- <property name="defaultContentType" value="text/html"/>
- <property name="contentNegotiationManager">
- <bean class="org.springframework.web.accept.ContentNegotiationManagerFactoryBean">
- <property name="ignoreAcceptHeader" value="true"/>
- <property name="defaultContentType" value="text/html"/>
- <property name="mediaTypes">
- <props>
- <prop key="json">application/json</prop>
- <prop key="xml">application/xml</prop>
- </props>
- </property>
- </bean>
- </property>
- <property name="viewResolvers">
- <list>
- <bean class="org.springframework.web.servlet.view.BeanNameViewResolver" />
- <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
- <property name="viewClass" value="org.springframework.web.servlet.view.JstlView"/>
- <property name="prefix" value="/WEB-INF/pages/"/>
- <property name="suffix" value=".jsp"></property>
- </bean>
- </list>
- </property>
- <property name="defaultViews">
- <list>
- <bean class="org.springframework.web.servlet.view.json.MappingJacksonJsonView" />
- <bean class="org.springframework.web.servlet.view.xml.MarshallingView" >
- <property name="marshaller">
- <bean class="org.springframework.oxm.xstream.XStreamMarshaller"/>
- </property>
- </bean>
- </list>
- </property>
- </bean>