2014-02-28 87 views
2

我正在處理Spring RestTemplate,並在執行下面的代碼後得到InvalidMediaTypeException。當我在RestClient應用程序中執行相同的服務時,我收到了有效的回覆。請幫助。Spring - RestTemplate拋出InvalidMediaTypeException

ResponseEntity<String> response = restTemplate.exchange(restUrl,HttpMethod.valueOf(method), new HttpEntity<byte[]>(headers), String.class); 

以下是堆棧跟蹤。

org.springframework.http.InvalidMediaTypeException: Invalid media type "multipart/mixed;boundary=simple boundary;charset=UTF-8": Invalid token character ' ' in token "simple boundary" 
    at org.springframework.http.MediaType.parseMediaType(MediaType.java:730) 
    at org.springframework.http.HttpHeaders.getContentType(HttpHeaders.java:305) 
    at org.springframework.web.client.HttpMessageConverterExtractor.getContentType(HttpMessageConverterExtractor.java:113) 
    at org.springframework.web.client.HttpMessageConverterExtractor.extractData(HttpMessageConverterExtractor.java:84) 
    at org.springframework.web.client.RestTemplate$ResponseEntityResponseExtractor.extractData(RestTemplate.java:687) 
    at org.springframework.web.client.RestTemplate$ResponseEntityResponseExtractor.extractData(RestTemplate.java:673) 
    at org.springframework.web.client.RestTemplate.doExecute(RestTemplate.java:491) 
    at org.springframework.web.client.RestTemplate.execute(RestTemplate.java:446) 
    at org.springframework.web.client.RestTemplate.exchange(RestTemplate.java:393) 
    at com.restclient.helper.RestHelper.getResponse(RestHelper.java:28) 
+0

你有什麼標題? – Avi

+0

content-type:application/x-www-form-urlencoded是標題。該方法是GET並將所有參數作爲URL的一部分傳遞。 –

回答

1

這是因爲客戶端內容類型和服務器之間的錯配接受內容類型。 Bassically正常的「GET」方法的默認內容類型是「文本/純文本」,但是你的情況下服務器需要的東西不是「文本/純文本」。所以當你向服務器發送請求時,你應該改變標題的內容類型

0

Spring會很快地解析響應的Content-Type。正如錯誤消息所暗示的,內容類型字段中不允許空格字符(除非引用它)。您可以在RFC 2616 section 2.2RFC 2045 section 5.1中閱讀。確保您打電話的服務器符合這些規則。

+0

如果我沒有錯,空格字符是響應內容類型的一部分。我能做些什麼來避免這種情況? –

+0

@RajaAsthana誰在運行服務器應用程序?應該糾正的是服務器端;目前它似乎發送語法錯誤的響應。 – holmis83

+0

同樣的服務正在提前休息客戶端應用程序。 :( –

0

異常和堆棧跟蹤了一切:

您擁有的客戶端:

ResponseEntity<String> response 
    = restTemplate.exchange(
     restUrl, 
     HttpMethod.valueOf(method), 
     new HttpEntity<byte[]>(headers), // <-- contains bad "Content-Type" value 
     String.class); 

headers地圖包含

"Content-Type" -> "multipart/mixed;boundary=simple boundary;charset=UTF-8"` 

當請求到達服務器,它會嘗試使用MediaType#parseMediaType(String)解析此標頭值,但空格字符無效,如異常消息所示:

Invalid token character ' ' in token "simple boundary"

下一步要研究如何headers填充。

相關問題