2017-04-25 168 views
0

我正在構建一些APISpring Boot,但是當我嘗試使用郵遞員查詢時,發現有關Content-Type的一些錯誤。Spring Boot不受支持的介質類型

@RequestMapping(path = "/verify", method = RequestMethod.POST, consumes = "text/xml", produces = "application/json") 
    String verify(@RequestBody Map<String, Object> payload, HttpServletRequest request) {} 

我不明白哪裏出現問題。

我注意到,當我刪除@RequestBody作爲參數的方法時,錯誤消失。爲什麼?

我只想:

  • 發送XML到API
  • 從API收到JSON

Postman call of API

+1

改變消費= 「文本/ XML」 來消耗= 「application/xml進行」 – jmarques

+0

對不起,無法正常工作。在主文章中查看我最近的更新。 –

+0

您是否也可以顯示請求中的Accept標頭? – dunni

回答

0

嘗試設置HTTP標頭的Content-Type爲text/xml中你的郵差。 您還可以查看目前在Chrome DevTools - >網絡標籤 - >點擊您的請求 - >標題標籤中的Content-Type標題。

+0

在郵差上,內容類型將根據您選擇的主體格式自動插入到標題中。發現什麼內容類型是沒有問題的,因爲Spring很清楚地回答。我在請求中傳遞的內容類型不受支持。爲什麼? –

+0

不知道郵遞員是如何工作的,但415錯誤清楚地表明Content-Type在Service中預期的內容以及從客戶端發送的內容不匹配。嘗試使用Chrome開發工具來確定在請求標頭中發送的內容類型是什麼。也嘗試使用cURL –

0

嘗試將jackson-dataformat-xml依賴項添加到您的類路徑中,或者如果您正在使用構建工具來編譯maven(pom.xml)或gradle(build.gradle)。

注意:您可以通過執行... consumes = { "text/xml", "application/xml" } ...支持text/xmlapplication/xml

注:不是字符串,你可以使用MediaType成員:... consumes = { MediaType.APPLICATION_XML, MediaType.TEXT_XML } ...

+0

我會嘗試添加依賴項。對於其他建議,你沒有看過發佈的代碼嗎?已經有消耗/產生屬性。 MediaType常量或純字符串不會更改最終結果。 –

+0

@AndreaLimoli我更新了我的答案,使其更清晰。對不起,我以前介紹的混亂。我想指出,您可以使用引用XML的多種內容類型,並且您可以使用MediaType而不是編寫字符串。這些是附註。 – andreim

1

如果你要和相關Content-Type錯誤,那麼我肯定假定您使用HTTP REST爲平均值之間進行通信的組件。

Content-Type是內HTTP REST相關內容協商話題。

內容協商中的主題HTTP REST意味着客戶端和服務必須同意表示媒體類型。即他們需要同意如何相互溝通,雙方之間發送和接收的每個有效載荷的內容是什麼。

客戶端指定它希望通過Accept

服務器指定通過Content-Type頭什麼產生

+0

你是對的,我設置了'@RequestMapping(value =「/ finding」,產生= {MediaType.APPLICATION_JSON_VALUE})' 檢查你的產值 – janwen

相關問題