1 回答
TA贡献1946条经验 获得超4个赞
事实证明,问题本身存在谬误。
我正在实现 aResponseErrorHandler因为我认为我需要它来解析响应,即使该响应返回一个 HTTP 错误代码。事实上,事实并非如此。
此答案表明,可以通过捕获 aHttpStatusCodeException或使用标准将响应解析为对象RestTemplate。这否定了对自定义ResponseErrorHandler的需要,因此也不需要返回不明确类型的对象。传递错误的方法可以捕获HttpStatusCodeException,尝试刷新访问令牌,然后通过递归再次调用自身。需要一个计数器来防止无限递归,但它可以传递而不是类变量。
缺点是它仍然需要在类周围传播错误管理逻辑,以及大量样板代码,但它比其他选项更整洁。
public UserOrders getUserOrders(User user, Integer methodCallCount) {
methodCallCount++;
UserOrders userOrders;
try {
userOrders = restTemplate.postForObject(USER_ORDERS_URI, request, UserOrders.class);
} catch (RestClientException ex) {
APIError apiError = new ObjectMapper().readValue(response.getBody(), APIError.class);
if (methodCallCount < MAX_METHOD_CALLS) {
if (apiError.isType(ACCESS_TOKEN_EXPIRED)) {
refreshVendorAccessTokenInfo(user);
userOrders = getUserOrders(user, methodCallCount);
}
}
}
return userOrders;
}
添加回答
举报