Я использую RestTemplate и добавил обработчик для обработки некоторых ошибок:
@Configuration
public class IntegrationConfiguration {
@Bean
public RestTemplate restTemplate() {
return new RestTemplateBuilder()
.errorHandler(new CustomErrorHandler())
.setConnectTimeout(4000)
.setReadTimeout(4000)
.build();
}
Вот реализация CustomErrorHandler:
public class CustomErrorHandler implements ResponseErrorHandler {
@Override
public boolean hasError(ClientHttpResponse response) throws IOException {
return response.getStatusCode().is4xxClientError() ||
response.getStatusCode().is5xxServerError();
}
@Override
public void handleError(ClientHttpResponse response) throws IOException {
final String body = new BufferedReader(new InputStreamReader(response.getBody()))
.lines().collect(Collectors.joining("\n"));
// more non important code...
}
Но я получаю
java.net.HttpRetryException: cannot retry due to server authentication, in streaming mode
at sun.net.www.protocol.http.HttpURLConnection.getInputStream0(HttpURLConnection.java:1692)
at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1492)
Когда я пытаюсь response.getBody()
. Я нашел этот ответ , но как его реализовать, как я могу установить реализацию ClientHttpRequestFactory (как показано выше), если этот ответ просто принимает классы, расширяющие ClientHttpRequestFactory?
ClientHttpRequestFactory - это функциональный интерфейс.