弹簧复位应用程序/*+;xml而不是application/xml
我有一个restful API,它应该返回xml或json响应。配置如下:弹簧复位应用程序/*+;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">
<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”}。