restTemplate自定义状态400码

restTemplate自定义状态400码
  • 场景,restTemplate在接收自定义状态码和系统错误状态码一致是会报错,接收不到
  • 下面拿实名认证二要素接口为例,实名认证不通过返回的是400
  • 在这里插入图片描述- 当实名认证不通过的时候,restTemplate拿不到响应结果,会直接抛异常
    在这里插入图片描述
分析原因:
  • 在RestTemplate源码中可以看到使用了默认的异常处理
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
  • ResponseErrorHandler类内部实现
    在这里插入图片描述
解决方案:
  • 自定义http异常处理类,实现ResponseErrorHandler接口
import org.springframework.http.client.ClientHttpResponse;
import org.springframework.web.client.ResponseErrorHandler;

/**
 * 自定义响应异常处理
 *
 * @author 刘斌-liub2@zzkqdc.com
 * @time 2022-09-21
 * @rutern
 */
public class CustomerResponseHandler implements ResponseErrorHandler {
    @Override
    public boolean hasError(ClientHttpResponse response) {
        return false;
    }

    @Override
    public void handleError(ClientHttpResponse response) {
    }
}
  • 设置restTemplate异常处理器为我们刚才自定义的那个
/**
 * @author liouwb
 */
@Configuration
public class RestTemplateConfig {
    /**
     * 异常处理器是默认的
     *
     * @param builder
     * @author liouwb
     * @time 2022-09-21
     * @rutern org.springframework.web.client.RestTemplate
     */
    @Bean
    public RestTemplate restTemplate(RestTemplateBuilder builder) {
        RestTemplate build = builder.build();
        List<HttpMessageConverter<?>> messageConverters = build.getMessageConverters();
        return build;
    }

    /**
     * 自定义异常处理(默认不处理,可以接收自定义的400 500等状态)
     *
     * @param builder
     * @author liouwb
     * @time 2022-09-21
     * @rutern org.springframework.web.client.RestTemplate
     */
    @Bean
    public RestTemplate customerRestTemplate(RestTemplateBuilder builder) {
        RestTemplate build = builder.build();
        List<HttpMessageConverter<?>> messageConverters = build.getMessageConverters();
        build.setErrorHandler(new CustomerResponseHandler());
        return build;
    }
}
  • 使用自定义异常处理接收400/500状态是,指定注入名称,(不指定的话就是默认的异常处理会报错)
    @Autowired(required = false)
    @Qualifier("customerRestTemplate")
    private RestTemplate restTemplate;
  • 指定之后可以接收400状态码
    在这里插入图片描述
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值