一些 API 的报错信息通过 Response 的 body返回。使用 HttpClient 能正常获取到 StatusCode 和 body 中的错误提示。然而使用 RestTemplate ,会直接抛出下面的异常。如果想获取原始的信息并进一步处理会比较麻烦。
1 |
|
RestTemplate 异常处理流程
下面看一下原因, RestTemplate 中的 getForObject, getForEntity 和 exchange 等常用方法最终都是调用 doExecute 方法。下面是 doExecute 方法源码:
1 |
|
从下面的代码可以看出,DefaultResponseErrorHandler 捕获并抛出了异常。
1 |
|
如果想自己捕获异常信息,自己处理异常的话可以通过实现 ResponseErrorHandler 类来实现。其源码如下:
1 |
|
自定义 RestTemplate 异常处理
如果想像 HttpClient 一样直接从 Response 获取 HttpStatus 和 body 中的报错信息 而不抛出异常,可以通过下面的代码实现:
1 |
|
设置 RestTemplate 的异常处理类
1 |
|
输出结果
1 |
|