Как переопределить любой HttpHeader в ответе WebClient? - PullRequest
0 голосов
/ 09 июля 2019
WebClient.builder().baseUrl("/").filter(contentTypeInterceptor()).build();

Как я могу изменить Content-Type полученного ответа (потому что я получаю ответ от веб-сервера, который испускает неправильный тип контента. Поскольку я не контролирую внешний сервер, я 'Я хотел бы исправить тип контента для дальнейшей корректной обработки (например, с помощью библиотеки Джексона и т. д.).

private ExchangeFilterFunction contentTypeInterceptor() {
    return ExchangeFilterFunction.ofResponseProcessor(clientResponse -> {
        org.springframework.web.reactive.function.client.ClientResponse.Headers headers = clientResponse.headers();
        //TODO how to headers.setContentType("myval) or headers.set("Content-Type", "myval");   
        //headers.asHttpHeaders(); cannot be used as it is readonly
    });
}

В целом можно ответить на вопрос, как переопределить любой заголовок http.

Кореньпричина в моем случае, что я получаю text/html, но тело ответа на самом деле application/xml. И jackson отклоняет синтаксический анализ этого ответа из-за:

org.springframework.web.reactive.function.UnsupportedMediaTypeException: Content type 'text/html' not supported for bodyType=MyResponse

1 Ответ

1 голос
/ 09 июля 2019

может как то так?

private ExchangeFilterFunction contentTypeInterceptor() {
    return ExchangeFilterFunction.ofRequestProcessor(clientRequest -> 
        Mono.just(ClientRequest.from(clientRequest)
            .header(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_XML_VALUE)
            .build()));
}
...