最近遇到一個請求API接口總是報401 Unauthorized錯誤,起初是認為這個是平台返回的,后來用Postman請求,發現平台其實返回的是一串json,里面帶有一些權限驗證失敗的消息,但到我們代碼里請求就自動變成401 Unauthorized錯誤。用抓包工具抓取代碼請求的平台返回數據,和用postman請求結果一致,都是有數據返回,但為什么到我們代碼里就會變成401 Unauthorized呢?
在網上查了一些資料后,對方平台在鑒權失敗后返回在http頭里標注了權限驗證失敗信息和401狀態碼,同時將錯誤消息也返回在body里。但到RestTemplate后,檢測到401異常,直接拋出異常,導致外部接收不到body信息。
解決方案:
在RestTemplate 執行請求之前,加上下面這句話就可以實現忽略401錯誤。
1 restTemplate.setErrorHandler(new DefaultResponseErrorHandler(){ 2 @Override 3 public void handleError(ClientHttpResponse response) throws IOException{ 4 if(response.getRawStatusCode() != 401){ 5 super.handleError(response); 6 } 7 } 8 });
參考文章:https://blog.csdn.net/achang07/article/details/80549741