繁体   English   中英

如何在案例 403 禁止使用 Java 中的 RestTemplate 接收 API 响应?

[英]How to receive the API response in case 403 forbiddein using RestTemplate in Java?

我有一个 function 使用 RestTemplate 调用外部 API。

public ApiResponse callApi(String url, ApiRequest request) {
    HttpHeaders headers = new HttpHeaders();
    headers.setContentType(MediaType.APPLICATION_JSON);
    HttpEntity<ApiRequest> httpRequest = new HttpEntity<>(request, headers);
    RestTemplate restTemplate = new RestTemplate();
    ResponseEntity<ApiResponse> responseEntity = restTemplate.postForEntity(url, httpRequest, ApiResponse.class);
    return responseEntity.getBody();
}

它在 HTTP 代码 200 的情况下工作正常,但在 403 代码的情况下抛出异常。 但是,即使出现 403 禁止错误,我仍然想知道我收到的响应正文中的消息。

这是 API 的响应主体,当使用 Postman 命中时会出现 403 响应,在使用代码命中时也会在异常堆栈跟踪中记录相同的内容:

{
    "status": false,
    "message": "Invalid key",
    "errorcode": "A002",
    "data": null
}

这是 ApiResponse 的结构:

public class ApiResponse {
    private boolean status;
    private String message;
    private String errorcode;
}

我应该怎么做才能提取响应的正文?

尝试捕获 RestTemplate 抛出的异常,默认情况下它会抛出HttpStatusCodeException

try {
    ResponseEntity<ApiResponse> responseEntity = restTemplate.postForEntity(url, httpRequest, ApiResponse.class);      
} catch (HttpStatusCodeException e) {
    log.warn(e.getResponseBodyAsString());
}

并尝试使用controlleradvice通知 map 异常

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM