当前位置: 首页 > 知识库问答 >
问题:

使用响应实体从另一个API提取信息

沈俊晤
2023-03-14

我有两个API让它们调用API1,API2
API1是一个系统API,它从数据库中提取数据并返回字符串列表
API2从API1中提取信息,并按原样返回字符串列表

现在我的问题是,如果API1出现故障,我该如何处理它。我知道我必须使用ResponseEntity来提取HTTP状态代码,但我无法这样做。以下面的代码为例

API1服务

private static List<String> getData(int attribute1){
//A piece of code that extracts data from the database based on the attribute1 and store the information in a res object<br>
    return res;
}

API2服务

private static List<String> getData(int attribute1){
    String uri="localhost:9191/getData/"+attribute1;
    private RestTemplate restTemplate = new RestTemplate();
    List<String> res = restTemplate.getForObject(uri, List.class);
    return res;
}

我需要改变我的API1服务函数的返回类型吗
如果是的话,它们看起来会是什么样子
不管API1中发生了什么,API2都会改变,如何适应响应实体
任何帮助都将不胜感激。

共有1个答案

孟俊晖
2023-03-14

如果您的API1已关闭或出现任何问题,您将使用RestTemplate调用“getForObject”方法时出现异常。如果您阅读文档,您将看到此方法抛出RestClientException,这意味着如果您想处理API1的任何问题,您需要尝试/捕获该方法并根据需要相应地处理异常。因此,您将有如下内容:

private static List getData(int attribute1) {

    String uri = "localhost:9191/getData/" + attribute1;

    private RestTemplate restTemplate = new RestTemplate();
    try {
        List res = restTemplate.getForObject(uri, List.class);
        return res;
    } catch(RestClientException rce) {
        // Here you'll handle the exception
    }
}

另外,请注意,RestClientExc0019有3个直接子类:ResourceAccessExc0019、RestClientResseExc0019和Unknown nContentTypeExc0019。您可以捕获其中的每一个,而不是爱抚RestClientExcpse,因此您可以以不同的方式处理它们。

 类似资料:
  • 我对Gatling/Scala完全陌生。 我有一个场景要执行。它是这样的: -->改变员工的轮班时间。 请帮助执行上述操作。一个步骤的详细解释将非常感谢考虑到我是完全新的这一点。 谢了!

  • 我正在使用此代码从Spotify的Web API获取令牌: 这导致在浏览器中显示: 太好了!但是如何从响应中提取“{令牌}”并将其用作对API的请求中的参数?例如,在请求https://api.spotify.com/v1/users/{user_id}/播放列表时,它需要标头字段中的令牌。 谢谢!

  • 我在Azure Active Directory中有一个租户场景,其中API1需要使用身份验证调用另一个API2,并且API1是从SPA调用的。 只是将API1中从SPA接收到的用户JWT传递给调用API2进行身份验证是否正确? 类似于:https://github.com/azure-samples/active-directory-dotnet-webapi-onbehalfof

  • 问题内容: 我正在尝试使用Hibernate的@Formula批注从另一个表中检索实体。给出以下代码: Result类如下所示: 但是,在尝试加载测试实体时,出现错误“找不到列“ TEST0_.RESULTDATE””。我还尝试了其他一些涉及@JoinFormula批注的事情,但是没有成功。我也遇到了这个答案,这似乎表明我在做的事情应该起作用,但事实并非如此。我该如何工作? 问题答案: 因此,我找

  • 我在Spring MVC中有REST api,这是许多用户常用的。假设我有这样的endpoint: 现在,我想将另一种媒体类型APPLICATION\u JSON添加到annotation@products。这可能会导致使用此终结点的用户应用出现一些问题吗?例如,当他们没有指定响应类型的标头,并且期望响应消息为文本时,这是否会导致他们将以json获得响应,并且与此api的结果集成将失败?

  • 因此,为了遵守职责分离原则,我尝试让我的修改方法(listNearestAirports)将列表返回给演示者(在不同的包中)。但我注意到,这在改型时很难做到,从必须在我的方法范围之外声明列表,到我只能在onResponse方法内迭代列表(当我试图返回列表时,我得到一个空指针异常)。请参阅下面的代码: 我想要向main()返回一个列表,因此可以执行以下操作: 什么是最简单的方法来返回来自改装的响应?