Merge remote-tracking branch 'base-version/main' into dev
This commit is contained in:
@@ -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);
|
||||||
|
|||||||
Reference in New Issue
Block a user