SpringBoot 使用 RestTemplate 调用exchange方法 显示错误信息

Posted liuxm-刘小明

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SpringBoot 使用 RestTemplate 调用exchange方法 显示错误信息相关的知识,希望对你有一定的参考价值。

restTemplate调用exchange方法,如果发生错误,看不到服务器返回的错误消息。或者想依赖返回的错误信息进行下一步处理。

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.http.client.ClientHttpRequestFactory;
import org.springframework.http.client.ClientHttpResponse;
import org.springframework.http.client.SimpleClientHttpRequestFactory;
import org.springframework.http.converter.StringHttpMessageConverter;
import org.springframework.web.client.ResponseErrorHandler;
import org.springframework.web.client.RestTemplate;

import java.io.IOException;
import java.nio.charset.Charset;

@Configuration
public class RestTemplateConfig {
    @Bean
    public RestTemplate getRestTemplate(ClientHttpRequestFactory factory) {
        RestTemplate restTemplate = new RestTemplate(factory);

        restTemplate.getMessageConverters().set(1,
                new StringHttpMessageConverter(Charset.forName("UTF-8")));

        restTemplate.setErrorHandler(new ThrowErrorHandler());

        return restTemplate;
    }

    @Bean
    public ClientHttpRequestFactory simpleClientHttpRequestFactory() {
        SimpleClientHttpRequestFactory factory = new SimpleClientHttpRequestFactory();
        factory.setReadTimeout(10000);//单位为ms
        factory.setConnectTimeout(5000);//单位为ms
        return factory;
    }

    public class ThrowErrorHandler implements ResponseErrorHandler {

        @Override
        public boolean hasError(ClientHttpResponse response) throws IOException {
            //返回false表示不管response的status是多少都返回没有错
            //这里可以自己定义那些status code你认为是可以抛Error
            return false;
        }

        @Override
        public void handleError(ClientHttpResponse response) throws IOException {
            System.out.println("================>" + response.getBody());
            //这里面可以实现你自己遇到了Error进行合理的处理
        }
    }

}

 

以上是关于SpringBoot 使用 RestTemplate 调用exchange方法 显示错误信息的主要内容,如果未能解决你的问题,请参考以下文章

基于SpringBoot实现使用restTemplate实现文件和普通参数的同时上传和接收

RestTemplate 负载均衡原理

Spring Webflux WebClient

模拟 resttemplate 交换总是返回 null

无法将 @LoadBalanced 与在 ClientCredentials 上配置的 OAuth2RestTemplate 一起使用

SpringBoot使用·下篇(SpringBoot集成MyBatis+日志打印+MyBatis-plus)