gpt4 book ai didi

java - Spring Boot外部api调用请求和数据库中的响应捕获

转载 作者:行者123 更新时间:2023-12-01 18:36:59 24 4
gpt4 key购买 nike

从我的后端应用程序(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/

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