我有一个 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/