在春天获取xml和jsp视图

时间:2011-07-29 10:41:40

标签: spring spring-mvc

我正在开发一个应用程序,它为某些服务提供视图,并作为其他人的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格式,但我想要一个视图。

1 个答案:

答案 0 :(得分:3)

默认情况下,ContentNegotiatingViewResolver使用HTTP Accept请求标头来决定要呈现的视图。如果客户端在该标头中指出它可以处理application/xml内容类型,它只会发回XML视图,而某些浏览器会这样做。

如果浏览器指示它可以接受HTML XML,那么您将无法预测哪些将被取回。由于没有任何其他信息,Spring无法决定你想要哪一个。

如果您的网址路径只是/,那么除了浏览器默认发送的内容之外,您没有提供任何有用的信息。

通过将ContentNegotiatingViewResolver属性设置为favorPathExtension,可以重新配置

true以使用URL中的文件扩展名来决定要解析的视图。例如,这将响应/blah.xml对XML的请求,优先于Accept标题。

ContentNegotiatingViewResolver还有其他一些选项,我建议您仔细阅读javadoc