***相关博客参考链接 :https://blog.csdn.net/houzidengyue/article/details/81907085***
使用RestTemplate过程中, 如果接口返回的不是200状态,则会抛出异常报错。但在实际接口对接中,可能希望获取接口返回的异常信息做返回。因此可以自定义RestTemplate异常的处理,在使用之前首先添加异常处理,如下:
第一种 :
restTemplate.setErrorHandler(new ResponseErrorHandler(){
@Override
public boolean hasError(ClientHttpResponse response) {
// 返回false表示不管response的status是多少都返回没有错
// 这里可以自己定义那些status code你认为是可以抛Error
return false;
}
@Override
public void handleError(ClientHttpResponse response) {
// 这里面可以实现你自己遇到了Error进行合理的处理
}
});
ResponseEntity<JSONObject> response = restTemplate.postForEntity(url, httpEntity, JSONObject.class);
这样在调用其他服务的时候就不会抛出异常,还能返回结果;
第二种:
创建异常实现类,然后注入;
package com.walletServer.config;
import java.io.IOException;
import org.springframework.http.client.ClientHttpResponse;
import org.springframework.web.client.ResponseErrorHandler;
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 {
// 这里面可以实现你自己遇到了Error进行合理的处理
}
}
@Bean
public RestTemplate restTemplate(ClientHttpRequestFactory factory) {
RestTemplate restTemplate=new RestTemplate(factory);
//Response status code 4XX or 5XX to the client.
restTemplate.setErrorHandler(new ThrowErrorHandler());
return restTemplate;
}
Spring-boot RestTemplate使用过程中返回结果不是200的异常处理
最新推荐文章于 2023-12-03 22:18:23 发布