Вы можете настроить логирование тела ошибок в формате JSON, используя интерфейс `ExchangeFilterFunction` в Spring WebClient.
Вот пример реализации `ExchangeFilterFunction` для записи содержимого ошибок в логи:
```java
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.http.HttpStatus;
import org.springframework.web.reactive.function.BodyExtractor;
import org.springframework.web.reactive.function.BodyExtractors;
import org.springframework.web.reactive.function.client.ClientResponse;
import org.springframework.web.reactive.function.client.ExchangeFilterFunction;
import reactor.core.publisher.Mono;
public class LoggingExchangeFilterFunction implements ExchangeFilterFunction {
private static final Logger LOGGER = LoggerFactory.getLogger(LoggingExchangeFilterFunction.class);
@Override
public Mono<ClientResponse> filter(ClientRequest request, ExchangeFunction next) {
return next.exchange(request)
.flatMap(response -> {
HttpStatus status = response.statusCode();
BodyExtractor<Mono<String>, ReactiveHttpInputMessage> bodyExtractor;
if (status.is4xxClientError() || status.is5xxServerError()) {
bodyExtractor = BodyExtractors.toMono(String.class);
} else {
bodyExtractor = BodyExtractors.empty();
}
return response.body(bodyExtractor)
.flatMap(body -> {
LOGGER.error("Error response status: {}, body: {}", status.value(), body);
return Mono.just(response);
});
});
}
}
```
Затем нужно зарегистрировать `LoggingExchangeFilterFunction` в WebClient:
```java
private WebClient webClient = WebClient.builder()
.baseUrl("https://партнерский-api-url")
.filter(new LoggingExchangeFilterFunction())
.build();
```
Теперь, при выполнении запросов через WebClient, содержимое ошибок будет записываться в логи в формате JSON.