RestTemplate设置超时时间及返回状态码非200处理

网友投稿 756 2022-07-26


目录1.调试postForEntity请求2.设置超时时间

默认情况下使用RestTemplate如果返回结果的状态码是200的话就正常处理,否则都会抛出异常;

1.调试postForEntity请求

调试postForEntity请求的方法找到判断响应结果状态码的方法是org.springframework.web.client.DefaultResponseErrorHandler类中的hasError方法

@Override

public boolean hasError(ClientHttpResponse response) throws IOException {

int rawStatusCode = response.getRawStatusCode();

HttpStatus statusCode = HttpStatus.resolve(rawStatusCode);

return (statusCode != null ? hasError(statusCode) : hasError(rawStatusCode));

}

代码再往上跟踪一级,如下:

protected void handleResponse(URI url, HttpMethod method, ClientHttpResponse response) throws IOException {

ResponseErrorHandler errorHandler = getErrorHandler();

boolean hasError = errorHandler.hasError(response);

if (logger.isDebugEnabled()) {

try {

int code = response.getRawStatusCode();

HttpStatus status = HttpStatus.resolve(code);

logger.debug("Response " + (status != null ? status : code));

}

catch (IOException ex) {

// ignore

}

}

if (hasError) {

errorHandler.handleError(url, method, response);

}

}

从上面的代码可以看到是使用了RestTemplate的错误处理器,所以我们就可以想办法自定义错误处理器;

@Bean

public RestTemplate restTemplate(ClientHttpRequestFactory factory){

RestTemplate restTemplate = new RestTemplate(factory);

ResponseErrorHandler responseErrorHandler = new ResponseErrorHandler() {

@Override

public boolean hasError(ClientHttpResponse response) throws IOException {

return true;

}

@Override

public void handleError(ClientHttpResponse response) throws IOException {

http:// }

};

restTemplate.setErrorHandler(responseErrorHandler);

return restTemplate;

}zhi

只需要将hasError方法的返回值更改为true就可以了,以后不管状态码是200还是其它的都会返回结果;

2.设置超时时间

RestTemplate默认使用的是SimpleClientHttpRequestFactory工厂方法,看下它的超时时间是:

private int connectTimeout = -1;

private int readTimeout = -1;

默认值都是-1,也就是没有超时时间;

其底层是使用URLConnection,而URLConnection实际上时封装了Socket,Socket我们知道是没有超时时间限制的,所以我们必须设置超时时间,否则如果请求的URL一直卡死程序将会不可以运行下去;

@Bean

public ClientHttpRequestFactory simpleClientHttpRequestFactory(){

Simphttp://leClientHttpRequestFactory factory = new SimpleClientHttpRequestFactory();

//读取超时5秒,默认无限限制,单位:毫秒

factory.setReadTimeout(5000);

//连接超时10秒,默认无限制,单位:毫秒

factory.setConnectTimeout(10000);

return factory;

}

以上就是RestTemplate设置超时时间及返回状态码非200处理的详细内容,更多关于RestTemplate超时设置非200处理的资料请关注我们其它相关文章!


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:Java用 Gradle配置compile及implementation和api的区别
下一篇:Java实例讲解注解的应用
相关文章

 发表评论

暂时没有评论,来抢沙发吧~