2017-04-23 37 views
0
@RequestMapping(value = "/test", method = RequestMethod.GET, produces = { "text/plain", "application/json" }) 

如果我發送一個請求:春RestController只考慮第一介質類型和忽略其餘部分

curl --header "Accept: text/plain, application/json" "http://localhost:8229/test/test" 

它發回的HTML響應正文406不可接受的響應。預期響應是一個200 OK的JSON對象。

但是,如果我反向MIME類型的順序:

curl --header "Accept: application/json, text/plain" "http://localhost:8229/test/test" 

然後,它發送預期的響應(在JSON)。

這是預期的行爲?爲什麼它忽略了第二種媒體類型?

PS:我使用Spring 1.3.5啓動釋放

編輯:我得到同樣的錯誤,如果我送"Accept: */*"。該API可以根據內部條件返回JSON或text/plain。

+0

因爲這是談判的內容是如何工作的。它從最需要的到較不理想的一個。在你的第一個請求中,你顯然比JSON更喜歡文本。但我懷疑你沒有在服務器端配置任何東西來返回純文本。 –

+0

我是否需要特別配置某些東西?我以爲春天會檢查是否在返回最需要的MIME類型,所需較少會被選中(如果是這樣的一個返回),然後返回。 我還曾試圖「接受:*/*」,我這得到了同樣的錯誤。 – Rushil

+0

我已經編輯了問題 – Rushil

回答

2

我想這是因爲在服務器端沒有配置你的Web配置組件。請參閱Content Negotiation進行配置。

+0

我看到有在XML和Java方法配置。但是沒有看到任何基於Annotation的配置。你知道任何可以完成這項工作的註釋嗎? – Rushil

+0

有一些主題XML和Java類基礎的配置。沒有具體的註釋,只是使用java配置而不是xml。使用ContentNegotiationConfigurer類來配置mediaType等。 –

相關問題