今天需要调用第三方平台rest接口,调用正常时没啥事,调用异常时比如401 时,发现后台解析response就报错HttpClientErrorException,body为null取不到。
各种百度及官方文档,发现是resttemplat处理机制的问题,
1、对于非2xx的,4xx 和 5xx 都进行了当做错误来处理。可以去看官方文档。这就要求添加try catche进行特殊处理。
2、使用resttemplate 前设置下requestfactory ,这样才能接收到body的值 。
restTemplate.setRequestFactory(new HttpComponentsClientHttpRequestFactory());
网上,解决方法很多,一类是catch后特殊处理,一类是采用重写错误捕获的方法,忽略掉4xx之类的处理方式,使之原样返回。
我使用的catch 特殊处理的方式,解决的此问题。
修改后的代码如上图就是添加了1、2。两个地方是的问题第一解决。
好了,问题解决,皆大欢喜!继续撸码!