2012-01-17 59 views
1

我有幾個REST服務定義了當前正在返回JSON格式的對象作爲服務響應主體。我試圖讓這個服務也接受XML作爲一個新的需求,雖然它不接受這個。Spring REST XML服務不接受XML作爲「接受」標頭

我遵循spring-mvc-showcase sample project並且幾乎完全相同地設置我的pom.xml依賴關係,我的服務定義也非常簡單。

@Controller 
@RequestMapping(value = "api/sales/*") 
public class SalesController { 

    @RequestMapping(value = "/countries", method = RequestMethod.GET) 
    @ResponseBody 
    public List<NamedEntity> getCountries() { 

NamedEntity有適當的@XmlRootElement註解。

有人可以解釋我需要將XML作爲spring-mvc-showcase sample project正在使用的ResponseBody的最基本要求。

編輯:增加了spring的MVC示例。

從彈簧-MVC-陳列櫃的樣品如下:

package org.springframework.samples.mvc.messageconverters; 

@Controller 
@RequestMapping("messageconverters/*") 
public class MessageConvertersController { 

    @RequestMapping(value="/xml", method=RequestMethod.GET) 
    public @ResponseBody JavaBean writeXml() { 
     return new JavaBean("bar", "fruit"); 

回答

0

添加@Produces( 「應用程序/ XML」)到的getCountries()

+0

這似乎並不工作,提到不也有這樣的註解樣本,我會更新我的職務,以顯示從春天樣品控制器。 – 2012-01-17 06:15:03

1

檢查請求頭,客戶需要在頭文件中有「application/xml」,而不是「application/json」

說了這些後,確保你已經爲你的對象註冊了適當的消息轉換器。如果您使用的是Java 6,那麼Spring將在您的類路徑中自動檢測JAXB,否則您可以手動添加轉換器。

+0

客戶端確實具有正確的接受子句'application/application + xml',我使用的是JDK7,但已重構並已切換回JDK6,但仍無法正常工作。我也添加了jaxb到我的POM中,沒有運氣,我的curl調用行是'curl -H「Accept:application/application + xml」-X GET'http:// localhost:8080/fsweb/app/api/sales /使用相同的'Accept'的國家''春季樣品工程適用於罰款。 – 2012-01-17 23:01:47

0

您需要發送「application/xml」,而不是「application/application + xml」。另請考慮使用:

@RequestMapping(value = "/countries", method = RequestMethod.GET, produces={"application/json", "application/xml"}) 

這可確保您的方法只響應這些媒體類型,並拒絕其他具有406 HTTP狀態碼的人。

0

試試這個調度程序servlet配置。

<mvc:annotation-driven 
     content-negotiation-manager="contentManager" /> 

<bean id="contentManager" 
     class="org.springframework.web.accept.ContentNegotiationManagerFactoryBean"> 
     <property name="favorPathExtension" value="false" /> 
     <property name="ignoreAcceptHeader" value="false" /> 
     <property name="defaultContentType" value="application/json" /> 
     <property name="useJaf" value="false" /> 
    </bean> 

和一些依賴

<dependency> 
      <groupId>com.fasterxml.jackson.core</groupId> 
      <artifactId>jackson-core</artifactId> 
      <version>2.4.3</version> 
     </dependency> 
     <dependency> 
      <groupId>com.fasterxml.jackson.core</groupId> 
      <artifactId>jackson-databind</artifactId> 
      <version>2.4.3</version> 
     </dependency> 
     <dependency> 
      <groupId>com.fasterxml.jackson.core</groupId> 
      <artifactId>jackson-annotations</artifactId> 
      <version>2.4.3</version> 
     </dependency> 
     <dependency> 
      <groupId>com.fasterxml.jackson.dataformat</groupId> 
      <artifactId>jackson-dataformat-xml</artifactId> 
      <version>2.4.3</version> 
     </dependency>