RestTemplate 401 获取错误信息处理

24 篇文章 0 订阅
调用第三方api 若是服务返回状态码不为200,默认会执行DefaultResponseErrorHandler
异常处理

@Override
	public void handleError(ClientHttpResponse response) throws IOException {
		HttpStatus statusCode = getHttpStatusCode(response);
		switch (statusCode.series()) {
			case CLIENT_ERROR:
				throw new HttpClientErrorException(statusCode, response.getStatusText(),
						response.getHeaders(), getResponseBody(response), getCharset(response));
			case SERVER_ERROR:
				throw new HttpServerErrorException(statusCode, response.getStatusText(),
						response.getHeaders(), getResponseBody(response), getCharset(response));
			default:
				throw new RestClientException("Unknown status code [" + statusCode + "]");
		}
	}


	判断是否异常
	protected boolean hasError(HttpStatus statusCode) {
		return (statusCode.series() == HttpStatus.Series.CLIENT_ERROR ||
				statusCode.series() == HttpStatus.Series.SERVER_ERROR);
	}





	通常会直接已异常形势抛出,若不特殊处理无法获取返回提示信息。
	需要捕捉HttpClientErrorException 异常,则可获取返回信息

	try{
      ......
    }catch (HttpClientErrorException e) {
                String resBody = e.getResponseBodyAsString();
                log.info("客户端异常返回:{}", resBody);
                return new ResponseEntity<>(JSON.parseObject(resBody, res), e.getStatusCode());
            } 



            一开始我这样写,死活返回的都是null
            原来跟我设置的requestFactory有关,
            采用SimpleClientHttpRequestFactory 无法获取提示
             需要换成 HttpComponentsClientHttpRequestFactory
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值