我正在开发一个应用程序,它为某些服务提供视图,并作为其他人的Web服务。
在控制器中,我已将'/'映射到视图,当应用程序启动时,会显示此视图 现在,当我尝试使用像这样的视图解析器时
<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格式,但我想要一个视图。
答案 0 :(得分:3)
默认情况下,ContentNegotiatingViewResolver
使用HTTP Accept
请求标头来决定要呈现的视图。如果客户端在该标头中指出它可以处理application/xml
内容类型,它只会发回XML视图,而某些浏览器会这样做。
如果浏览器指示它可以接受HTML 和 XML,那么您将无法预测哪些将被取回。由于没有任何其他信息,Spring无法决定你想要哪一个。
如果您的网址路径只是/
,那么除了浏览器默认发送的内容之外,您没有提供任何有用的信息。
ContentNegotiatingViewResolver
属性设置为favorPathExtension
,可以重新配置 true
以使用URL中的文件扩展名来决定要解析的视图。例如,这将响应/blah.xml
对XML的请求,优先于Accept
标题。
ContentNegotiatingViewResolver
还有其他一些选项,我建议您仔细阅读javadoc。