Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ssis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
弹簧复位应用程序/*+;xml而不是application/xml_Xml_Spring_Api_Rest_Spring Mvc - Fatal编程技术网

弹簧复位应用程序/*+;xml而不是application/xml

弹簧复位应用程序/*+;xml而不是application/xml,xml,spring,api,rest,spring-mvc,Xml,Spring,Api,Rest,Spring Mvc,我有一个restful API,它应该返回xml或json响应。配置如下: <bean class="org.springframework.web.servlet.view.ContentNegotiatingViewResolver"> <property name="ignoreAcceptHeader" value="false" /> <property name="mediaTypes">

我有一个restful API,它应该返回xml或json响应。配置如下:

<bean       class="org.springframework.web.servlet.view.ContentNegotiatingViewResolver">
        <property name="ignoreAcceptHeader" value="false" />
        <property name="mediaTypes">
            <map>
                <entry key="xml" value="application/xml" />
                <entry key="json" value="application/json" />
            </map>
        </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" ref="objectXmlMarshaller" />
                </bean>
            </list>
        </property>
</bean>

唉,我们得到的响应是application/*+xml,而不是application/xml。这会导致chrome(或其他浏览器)下载文件而不是显示文件


有没有办法解决这个问题?

您可以尝试使用@RequestMapping注释的“products”属性显式指定响应类型。例如:

@RequestMapping(value="rest/somePath", method = RequestMethod.GET, produces="application/xml")
public SomeObject restMethod(...necessary parametes...) {
    // Do necessary evaluation and return object.
}

您可以在spring参考文档中找到相关部分。

谢谢。这确实适用于一种方法。但是,如果整个API需要几十个/数百个方法,那么可以做什么呢?如果您使用@RequestMapping(…)注释整个控制器类,这也可以正常工作。但所有mwthod级别的声明都将覆盖products属性的类级别声明。另外,我认为您可以尝试将请求的accept头覆盖为仅“application/xml”(我认为这可以使用自定义筛选器)。这将强制应用程序以您需要的格式返回结果。但我从来没有这样做过,也不能确切地告诉你怎么做。这只是一个想法。谢谢!在方法/类级别上进行注释的问题在于,您无法灵活地获取json或xml(当然,这很麻烦)。这是spring的一个错误吗?您可以轻松定义几个返回(可生产)格式。例如,如果要返回application/xml或application/json,可以指定products froperty,如:products={“application/json”,“application/xml”}。