Merge remote-tracking branch 'base-version/main' into dev

This commit is contained in:
chenbowen
2025-11-06 23:10:12 +08:00

View File

@@ -50,14 +50,14 @@ public class HttpStepHandler implements ApiStepHandler {
private static final int RETRY_ATTEMPTS = 3; private static final int RETRY_ATTEMPTS = 3;
private static final Set<String> DEFAULT_FORWARDED_HEADERS = Set.of( private static final Set<String> DEFAULT_FORWARDED_HEADERS = Set.of(
"authorization", "authorization",
"zt-auth-token", "zt-auth-token",
"tenant-id", "tenant-id",
"visit-tenant-id", "visit-tenant-id",
"visit-company-id", "visit-company-id",
"visit-company-name", "visit-company-name",
"visit-dept-id", "visit-dept-id",
"visit-dept-name" "visit-dept-name"
); );
@Override @Override
@@ -112,8 +112,17 @@ public class HttpStepHandler implements ApiStepHandler {
Map<String, String> headerMap = resolveHeaders(stepDefinition, payload); Map<String, String> headerMap = resolveHeaders(stepDefinition, payload);
Duration timeout = resolveTimeout(stepDefinition); Duration timeout = resolveTimeout(stepDefinition);
WebClient client = webClientBuilder.build(); WebClient client = webClientBuilder.build();
WebClient.RequestHeadersSpec<?> requestSpec = buildRequest(client, callSpec, requestPayload, headerMap, supportsBody); final HttpRequestPayload resolvedPayload = requestPayload;
Mono<Object> responseMono = requestSpec.retrieve().bodyToMono(Object.class); boolean finalSupportsBody = supportsBody;
Mono<Object> responseMono = Mono.defer(() -> {
// 每次订阅(含重试)都会重新构建请求,避免缓存第一次结果
HttpRequestPayload payloadForAttempt = resolvedPayload == null
? HttpRequestPayload.of(null, Collections.emptyMap())
: resolvedPayload;
return buildRequest(client, callSpec, payloadForAttempt, headerMap, finalSupportsBody)
.retrieve()
.bodyToMono(Object.class);
});
responseMono = applyResilientRetry(responseMono, stepDefinition); responseMono = applyResilientRetry(responseMono, stepDefinition);
Object response = timeout == null ? responseMono.block() : responseMono.block(timeout); Object response = timeout == null ? responseMono.block() : responseMono.block(timeout);
payload.addStepResult(ApiStepResult.builder() payload.addStepResult(ApiStepResult.builder()
@@ -353,12 +362,12 @@ public class HttpStepHandler implements ApiStepHandler {
private record HttpRequestPayload(Object body, Map<String, Object> queryParams) { private record HttpRequestPayload(Object body, Map<String, Object> queryParams) {
private HttpRequestPayload { private HttpRequestPayload {
Map<String, Object> safeQuery = queryParams == null Map<String, Object> safeQuery = queryParams == null
? Collections.emptyMap() ? Collections.emptyMap()
: Collections.unmodifiableMap(new LinkedHashMap<>(queryParams)); : Collections.unmodifiableMap(new LinkedHashMap<>(queryParams));
queryParams = safeQuery; queryParams = safeQuery;
} }
static HttpRequestPayload of(Object body, Map<String, Object> queryParams) { static HttpRequestPayload of(Object body, Map<String, Object> queryParams) {
return new HttpRequestPayload(body, queryParams); return new HttpRequestPayload(body, queryParams);