Spring - RestTemplate, выбрасывающий InvalidMediaTypeException
Я работаю над Spring RestTemplate и получаю InvalidMediaTypeException
после выполнения кода ниже. Когда я выполняю ту же службу в приложении RestClient, я получаю действительный ответ. Пожалуйста, помогите.
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)
3 ответа
Это потому, что несоответствие между типом контента клиента и сервером принимает тип контента. В обычном методе "GET" тип содержимого по умолчанию - "text/plain", но в случае, если серверу требуется что-то не "text/plain". Поэтому вы должны изменить contenttype заголовка, когда отправляете запрос на ваш сервер.
Весна разбирает Content-Type
Ответ довольно строгий. Как следует из сообщения об ошибке, пробел не допускается в поле Content-Type (если оно не заключено в кавычки). Вы можете прочитать об этом в RFC 2616, раздел 2.2 или RFC 2045, раздел 5.1. Убедитесь, что сервер, которому вы звоните, соответствует этим правилам.
Исключение и трассировка стека говорят сами за себя:
На стороне клиента у вас есть:
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
населён.