gpt4 book ai didi

java - 如何在 Spring 中编写仅通过另一个 API 发送响应的 REST 端点?

转载 作者:行者123 更新时间:2023-12-02 10:31:24 29 4
gpt4 key购买 nike

我有一个 REST API,然后是一个带有 Spring 后端的 Web 应用程序。在Spring后端,我想创建一个路由,我们称之为api-proxy/get-data,它会转到API,我们称之为api/get-data >,无论它收到什么 HTTP 响应,它都应该直接将其发送到 Web 应用程序前端。现在我的代码看起来像这样:

@RequestMapping(
value = "/api-proxy/get-data/{id}",
method = RequestMethod.GET,
produces = MediaType.APPLICATION_JSON_VALUE
)
public ResponseEntity<String> getData(@PathVariable String id)
{
RestTemplate restTemplate = new RestTemplate();
String apiURL = "http://myapi.com/api/get-data/" + id;
ResponseEntity<String> response = restTemplate.getForEntity(apiURL, String.class);
return response;
}

我认为这会起作用,但不幸的是,当 RestTemplate.getForEntity 获取 404 时,它不会返回带有 404 状态代码的 ResponseEntity ,它会引发异常。因此,我必须手动检查响应并在 catch block 中构建它的副本 - 并且对于 500 个服务器错误等也这样做。

在 Spring 中获得我想要的行为的正确方法是什么?无论我从上游 API 获得什么 HTTP 响应,我都希望将其准确发送到客户端、 header 等。几乎就像一个代理。

最佳答案

尝试下面的代码,它会给你错误的地方

ResponseEntity<String> response = restTemplate.exchange(Url, 
HttpMethod.GET,
null,
new ParameterizedTypeReference<String>>(){});

if (response.getStatusCode().is2xxSuccessful()) {
return response.getBody();
} else if (response.getStatusCode().is4xxClientError()) {
throw new Exception("Exception while "+response.getBody());
} else if (response.getStatusCode().is5xxServerError()) {
throw new Exception("Bad request error "+response.getBody());
} else {
throw new Exception("Exception while querying service "+response.getBody());
}

关于java - 如何在 Spring 中编写仅通过另一个 API 发送响应的 REST 端点?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53592114/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com