我正在开发一个可为某些服务提供视图并为其他服务提供网络服务的应用程序.
在控制器中,我已将“ /”映射到视图,并且在应用程序启动时显示了该视图.
现在,当我尝试使用这种视图解析器时
<bean class="org.springframework.web.servlet.view.ContentNegotiatingViewResolver">
<property name="mediaTypes">
<map>
<entry key="html" value="text/html" />
<entry key="xml" value="application/xml" />
</map>
</property>
<property name="defaultViews">
<list>
<bean class="org.springframework.web.servlet.view.json.MappingJacksonJsonView" />
<bean class="org.springframework.web.servlet.view.xml.MarshallingView">
<constructor-arg>
<bean class="org.springframework.oxm.xstream.XStreamMarshaller"
p:autodetectAnnotations="false" />
</constructor-arg>
</bean>
</list>
</property>
<property name="viewResolvers">
<list>
<bean class="org.springframework.web.servlet.view.BeanNameViewResolver" />
</list>
</property>
</bean>
<bean id="jspView" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/views/" />
<property name="suffix" value=".jsp" />
</bean>
但是问题是,现在一切都以xml格式出现.所以当我启动应用程序时
默认情况下,第一页采用xml格式,但我需要查看.
最佳答案
默认情况下,ContentNegotiatingViewResolver使用HTTP接受请求标头来决定呈现哪个视图.如果客户端在该标头中指示它可以处理application / xml内容类型,则它只会发送回XML视图,某些浏览器会这样做.
如果浏览器指示它可以接受HTML和XML,那么您将获得的回报是不可预测的.在没有任何其他信息的情况下,Spring无法确定您想要哪个.
如果您的URL路径只是/,则除了浏览器默认发送的内容外,您没有提供其他有用的信息.
通过将favorPathExtension属性设置为true,可以将ContentNegotiatingViewResolver重新配置为使用URL中的文件扩展名来决定要解析的视图.例如,这将优先使用Accept标头,以XML响应对/blah.xml的请求.
ContentNegotiatingViewResolver还有其他一些选择,建议您仔细阅读javadoc.