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 населён.

Другие вопросы по тегам