2013-02-07 47 views
1

我有一個Spring 3.2 MVC REST服務,它通過擴展ResponseEntityExceptionHandler來實現錯誤處理。這將處理standard Spring exceptions,並且將根據客戶端的請求以相應的HTTP狀態和XML或JSON中的自定義「錯誤」ResponseEntity對象進行響應。這適用於除HttpMediaTypeNotAcceptableException之外的所有標準例外。Spring MVC - 處理HttpMediaTypeNotAcceptableException時如何設置返回媒體類型?

我遇到的這個例外的問題是,它拋出第一個地方的原因是無法根據請求確定響應媒體類型(application/xml,application/json等)。如果我嘗試爲這個異常返回一個「Error」ResponseEntity對象,它將會失敗,因爲響應媒體類型無法確定(這就是爲什麼首先要處理這個異常)......並且基本上會得到另一個HttpMediaTypeNotAcceptableException從我的ExceptionHandler。

我需要找出處理HttpMediaTypeNotAcceptableException以指定有效的響應媒體類型的方法,因此ResponseEntity會將其傳送給客戶端。由於請求的媒體類型無法確定,這可能只是我的服務的默認設置(應用程序/ xml)

任何想法?

回答

0

編輯:這個答案很無用,請參閱下面的評論。抱歉。

因爲在這種情況下,無論如何,通信是相當混亂的,也許這足以將狀態碼設置爲400 - Bad Request,並希望客戶端並不真正希望以服務器不知道的格式進行機器可讀的答案。如果發送響應主體,可能使用Content-Type: text/plain - 這對客戶來說沒有用處,但也許是調試情況的人;)或者適合你情緒的任何東西。

更新:更好的解決方案可能是使用手冊中解釋的方法;在:http://static.springsource.org/spring/docs/3.2.x/spring-framework-reference/html/mvc.html#mvc-ann-customer-servlet-container-error-page但是,我不得不承認,我真的沒有嘗試,如果這樣的作品。

+0

它在這種情況下返回'406 - Not Acceptable',但問題是我似乎沒有任何對body或Content-Type的控制權。我總是得到默認的HTML Tomcat錯誤頁面。我已經嘗試在響應中設置Content-Type標題,但在消息轉換器處理期間它會被刪除(與正文一起)。 – WayneC

+0

Narf,我是tomcat並沒有那樣做,因爲我們已經在錯誤處理階段。我錯了。在鏈接到它的頁面上,在Cp 17.11.5中討論設置一個自定義錯誤頁面,在錯誤頁面中可以填入'@RequestMapping(value =「/ error」,產生=「application/json」)'控制器,也許這就是訣竅。 –

相關問題