首页 > 解决方案 > Rest Api 对成功和失败有不同的响应

问题描述

我在我的代码中使用了非常旧的第 3 方 API,例如在成功和失败的情况下返回不同的响应

为了成功

 SuccessResObj{
     a{...
        b{...
           c{...}
         }
      }
    }

实际 SuccessResObj 有大约 10-15 个嵌套对象。

失败

    FailureResObj{
     status="failure because of ...";
     code="400"; // code will always be 400 in case of failure, irrespective of reason of failure
    }

FailureResObj 只有 2 个变量。

我知道它是错误的,但第 3 方 API 不会改变那里的响应,我必须在我的代码中解决问题,我应该如何处理它,因为我需要在数据库中记录这两种情况。

编辑

我尝试创建一个 WrapperBean

WrapperBean{
 SuccessResObj;
 FailureResObj;
}

WrapperBean=ApiResonse();

然后它的 ClassCastExcaption 因为响应只是一种类型的对象,我试图将它与具有 2 个对象的 WrapperBean 映射。

此类响应的示例处理代码将不胜感激。

可以简单地将其视为一种随机返回 2 种不同类型响应的方法。应该如何处理。

标签: javarestresponse

解决方案


当您使用RestTemplate时,RestTemplate 将HttpClientErrorException在没有 200 HTTP 状态的情况下抛出。

这是示例代码:

try {
    String successResponse = restTemplate.exchange(uri, httpMethod, httpEntity, String.class);
    // convert String in to Object using object mapper
} catch (HttpClientErrorException e) {
    if (e.getStatusCode().value() == 400) {
        String errorResponse = e.getResponseBodyAsString();
        // convert String in to Object using object mapper
        }
    }
}

有关更多信息,请ObjectMapper 查看此


推荐阅读