2014-02-28 56 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填充。

相关问题