2012-08-25 74 views
1

我有一個應該返回xml或json響應的restful API。配置如下:Spring返回應用程序/ * + xml而不是應用程序/ xml

<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> 

可惜的是,我們得到的是應用程序/ * + XML而不是應用/ XML響應。這會導致Chrome(或其他瀏覽器)下載文件而不是顯示它。

任何方式解決這一問題?

回答

0

你可以嘗試指定響應明確使用鍵入「生產」的@RequestMapping註釋財產。例如:

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

Here您可以在彈簧參考文檔中找到相關部分。

+0

謝謝。這確實適用於一種方法。但是如果需要使用數十種/數百種方法完成整個API,可以做些什麼? – checklist

+0

如果使用@RequestMapping(...)對整個控制器類進行批註,這也會正常工作。但是,所有mwthod級別聲明都將覆蓋生產屬性的類級別聲明。 – dimas

+0

此外,我認爲你可以嘗試覆蓋接受標頭的請求只有「應用程序/ xml」(我認爲這是可能使用自定義過濾器)。這應該強制您的應用程序以您需要的格式返回結果。但我從來沒有這樣做過,也無法告訴你如何正確地做到這一點。這只是一個想法。 – dimas

相關問題