rest template 设置超时时间,resttemplate异常处理
目录
1.调试后外来物请求2.设置超时时间默认情况下使用客户端如果返回结果的状态码是200的话就正常处理,否则都会抛出异常;
1.调试postForEntity请求
调试后外来物请求的方法找到判断响应结果状态码的方法是org。spring框架。网络。客户。默认响应错误处理程序类中的哈泽罗方法
@ override public boolean hasError(ClientHttpResponse响应)抛出io异常{ int rawStatusCode=response。getrawstatuscode();http status状态代码=http status。解决(原始状态代码);return (statusCode!=null?hasError(状态码): hasError(rawStatusCode));}代码再往上跟踪一级,如下:
受保护的void handleResponse(URI url,HttpMethod方法,ClientHttpResponse响应)抛出io异常{响应错误处理程序错误处理程序=获取错误处理程序();布尔值有错误=错误处理程序。有错误(响应);如果(记录器。isdebugenabled()){ try { int code=response。getrawstatuscode();http状态状态=http状态。解决(代码);logger.debug(Response (状态!=null?状态:代码));} catch(io exception ex){//ignore } } if(hasError){错误处理程序。处理错误(URL,方法,响应);}}从上面的代码可以看到是使用了客户端的错误处理器,所以我们就可以想办法自定义错误处理器;
@ Bean public rest template rest template(clienthttp requestfactory factory){ rest template rest template=new rest template(factory);ResponseErrorHandler ResponseErrorHandler=new ResponseErrorHandler(){ @ Override public boolean hasError(ClientHttpResponse响应)抛出IOException { return true} @覆盖公共void句柄错误(ClientHttpResponse响应)抛出io异常{ };rest模板。设置错误处理程序(responseErrorHandler);返回restTemplate}智只需要将哈泽罗方法的返回值更改为真实的就可以了,以后不管状态码是200还是其它的都会返回结果;
2.设置超时时间
RestTemplate默认使用的是SimpleClientHttpRequestFactory工厂方法,看下它的超时时间是:
private int连接超时=-1;private int读取超时=-1;默认值都是-1,也就是没有超时时间;
其底层是使用URLConnection,而通过实际上时封装了插座,插座我们知道是没有超时时间限制的,所以我们必须设置超时时间,否则如果请求的统一资源定位器一直卡死程序将会不可以运行下去;
@ Bean公共客户端http请求工厂简单客户端http请求工厂(){简单客户端http请求工厂工厂=新建简单客户端http请求工厂();//读取超时5秒,默认无限限制,单位:毫秒工厂。setreadtime out(5000);//连接超时10秒,默认无限制,单位:毫秒工厂。setconnecttimeout(10000);返厂;}以上就是客户端设置超时时间及返回状态码非200处理的详细内容,更多关于客户端超时设置非200处理的资料请关注盛行信息技术其它相关文章!
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。