Spring WebClient получает неверный Content-Type

Когда я запускаю WebClient следующим образом:

WebClient.create(apiUrl)
                .get()
                .uri(uriBuilder -> uriBuilder
                        .path("/some/{productId}/")
                        .queryParam("ws_key", apiKey)
                        .build(productId)
                )
                .accept(MediaType.APPLICATION_XML)
                .retrieve()
                .bodyToMono(MyClass.class)
                .block();

Сервер возвращает заголовок Content-Type со значением text / html.

Когда я использую Chrome для выполнения запроса, он правильно возвращает text / xml (это страница XML).

Я пробовал несколько параметров accept, и всегда получаю text / html.

Есть идеи по проблеме? Спасибо!


person Mr.Eddart    schedule 08.11.2020    source источник
comment
Вы пробовали использовать MediaType.TEXT_XML? Что содержит заголовок Accept в вашем запросе Chrome?   -  person Andrei Kovrov    schedule 08.11.2020
comment
действительно ли вы изучали ответ, что вы получаете xml обратно и что вы не получаете сообщение об ошибке с html-страницей или что-то в этом роде.   -  person Toerktumlare    schedule 08.11.2020


Ответы (1)


Попробуйте использовать curl, чтобы проверить это, добавьте -Hв заголовки настроек.

curl http://xxx/some/product -H "Accept:text/xml"

Если получился такой же результат (html). Я думаю, что серверная часть должна быть проблемной.

При использовании браузера для доступа к API я думаю, что его заголовок accept по умолчанию установлен на * / *, текст / html или что-то подобное.

Если серверная сторона управляется вами, явно установите тип содержимого тела ответа.

person Hantsy    schedule 08.11.2020