从我的后端应用程序(springboot、java8)我将进行多个外部 api 调用。我需要将所有请求和响应数据(包括 header 、请求和响应正文)记录到数据库(MongoDB)中。
下面是我的示例代码,这是我 try catch 每个外部 api 调用的请求和响应的方式。在异常(exception)情况下,我会将状态存储为“失败”。
在我的项目中,将在新的第 3 方 api 集成中添加多个模块,因此在每个模块中,对于每个不同的外部 api 调用,我必须捕获像这样的所有请求和响应。我对以下方法不满意。请建议解决此问题的最佳方法。
服务层方法示例
public ResponseDTOFromExternalApi externalApiCallServiceMethod(String clientId, RequestDTO requestDTO) {
ExternalApiCallRequestObj externalApiCallRequestObj = prepareExternalApiRequestObjFromRequestDTO(requestDTO);
ApiCall apiCall = ApiCall.builder()
.clientId(clientId)
.status("SUBMITTED")
.requestPayload(externalApiCallRequestObj)
.build();
apiCall = apiCallRepository.save(apiCall);
ExternalApiCallReponseObj externalApiCallReponseObj = externalApiCallService.callExternalApi1(externalApiCallRequestObj);
apiCall = apiCallRepository.findById(apiCall.getId());
apiCall.setResponsePayload(externalApiCallReponseObj);
apiCall.setStatus("COMPLETED");
apiCallRepository.save(apiCall);
return toDTO(externalApiCallReponseObj);
}
API 调用的示例域
@Document("api_calls")
@Builder
@Data
public class ApiCall {
@Id
private String id;
private String clientId;
private String status;
private Object requestPayload;
private Object responsePayload;
}
最佳答案
Spring 的 WebClient 已经能够通过添加交换过滤器来记录所有请求和响应数据。
通过将其用于网络请求,剩下要做的唯一一件事就是将此信息写入 mongodb。
这是有关记录请求和响应的教程: https://www.baeldung.com/spring-log-webclient-calls
干杯
关于java - Spring Boot外部api调用请求和数据库中的响应捕获,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60014084/