2013-12-12 57 views
0

我使用Spring 3.2.5來創建REST風格的Web服務。爲了實現它,我使用了@ResponseBody標籤。當我使用InternalResourceViewResolver並嘗試加載Html響應時,它工作正常。但是,當我打電話其被標記爲@ResponseBody一個URL然後它給出HTTP 406與錯誤文本錯誤代碼作爲使用JSON的Spring REST風格的Web服務提供HTTP 406錯誤代碼

由該請求所標識的資源僅能夠與特徵產生響應的不能接受根據該請求「接受」標題。

我在我的lib目錄中也包含了Jackson jar文件。

這是我處理服務請求的控制器方法。

@ResponseBody 
@RequestMapping (value = "/resp.htm") 
public Data jsonResp() { 
    Data d = new Data(); 

    d.setName("TEst"); 
    d.setAddr("Address...."); 

    return d; 
} 

有很多問題都被要求回答&,我試過很多人,但它仍然給出了同樣的結果。然後我遇到了一個新的答案,這是說明使用ContentNegotiatingViewResolver。通過使用它,我能夠以預期的格式查看響應。這是JSON格式。

使用ContentNegotiatingViewResolver,servlet調度代碼之後看起來是這樣的:

<bean 
    class="org.springframework.web.servlet.view.ContentNegotiatingViewResolver"> 
    <property name="order" value="1" /> 
    <property name="mediaTypes"> 
     <map> 
      <entry key="json" value="application/json" /> 
     </map> 
    </property> 

    <property name="defaultViews"> 
     <list> 
      <!-- JSON View --> 
      <bean 
       class="org.springframework.web.servlet.view.json.MappingJacksonJsonView"> 
      </bean> 
     </list> 
    </property> 
    <property name="ignoreAcceptHeader" value="true" /> 
</bean> 

<bean id="viewResolver" 
    class="org.springframework.web.servlet.view.InternalResourceViewResolver"> 
    <property name="order" value="2" /> 
    <property name="prefix" value="/WEB-INF/view/" /> 
    <property name="suffix" value=".jsp" /> 
</bean> 

所以,我的問題是,當我們需要使用Spring的Web服務功能,我們必須要求有ContentNegotiatingViewResolver

回答

0

與自定義類類型一起使用的註釋@ResponseBody通常使用MappingJackson2HttpMessageConverter將對象轉換爲JSON並在application/json內容中將其返回。

因爲你的請求不包含Accept頭爲application/json,春認爲它是創造不可接受的內容,而是返回一個406

你可以簡單地改變你的要求增加Accept頭。 (您不能在瀏覽器中輕鬆完成此操作)。

0

在我的情況下,請求有.html後綴並收到此錯誤。一旦刪除,它工作正常。

0

所有你需要做的是jackson庫添加到您的類路徑中找到它們Here