2

我正在阅读有关如何使用 Spring MVC 创建 REST 样式服务的Spring 3.0 文档博客文章(后续),但我找不到任何有关如何使用 ContentNegotiatingViewResolver 的工作示例。我有一个像这样的测试控制器

@Controller
public class IndexController implements Serializable
{
    @RequestMapping("/index")
    public ModelAndView index()
    {
        ModelAndView mav = new ModelAndView();
        mav.setViewName("index");
        return mav;
    }   
}

并尝试使用这样的东西

<bean
    class="org.springframework.web.servlet.view.ContentNegotiatingViewResolver">
    <property name="mediaTypes">
        <map>
            <entry key="html" value="text/html" />
            <entry key="xml" value="text/xml" />
            <!--
                <entry key="json" value="application/json"/>
            -->
        </map>
    </property>
    <property name="defaultContentType"><value>text/html</value></property>
    <property name="defaultViews">
        <bean class="org.springframework.web.servlet.view.xml.MarshallingView">
            <property name="marshaller">
                <bean class="org.springframework.oxm.xstream.XStreamMarshaller" />
            </property>
        </bean>
    </property>
    <property name="viewResolvers">
        <list>
            <bean
                class="org.springframework.web.servlet.view.InternalResourceViewResolver">
                <property name="prefix" value="/WEB-INF/views/pages/" />
                <property name="suffix" value=".jsp" />
            </bean>
        </list>
    </property>
</bean>

尝试根据 URL 中的扩展名解析视图(我想支持 html、.xml 和 .json)。.html 视图有效(也显示了正确的 JSP 视图),但我尝试让 JSON 和 XML 启动并运行似乎没有任何效果(设置 defaultViews 属性只是我尝试过的事情之一)。似乎也没有那么多阅读材料。有没有人有经验或例子?

4

1 回答 1

2

我相信您的问题是 XML 的内容类型不是text/xml,而是application/xml. 您会发现它MarshallingView不接受text/xml.

什么ContentNegotiatingViewResolver是咨询它的每个观点,询问他们是否会接受从请求中解决的内容类型。对于您想要支持的每种内容类型,您需要一个具有匹配contentType属性的视图。

您可以更改属性中的内容类型mediaTypes,也可以覆盖to的contentType属性。MarshallingViewtext/xml

于 2010-01-13T13:45:42.107 回答