You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@shenyu.apache.org by xi...@apache.org on 2022/12/02 13:34:12 UTC

[shenyu] branch master updated: [type:refactor] refactor sdk test and processArgument. (#4226)

This is an automated email from the ASF dual-hosted git repository.

xiaoyu pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/shenyu.git


The following commit(s) were added to refs/heads/master by this push:
     new 8ed89a82a [type:refactor] refactor sdk test and processArgument. (#4226)
8ed89a82a is described below

commit 8ed89a82a7f89d3e2cc8cc8623ad34430de20131
Author: yunlongn <yu...@outlook.com>
AuthorDate: Fri Dec 2 21:34:03 2022 +0800

    [type:refactor] refactor sdk test and processArgument. (#4226)
    
    * [type:refactor] refactor sdk test and processArgument.
    
    * [type:refactor] refactor sdk test and processArgument.
    
    * [type:refactor] refactor sdk test and processArgument.
    
    * [type:refactor] refactor sdk test and processArgument.
    
    * [type:refactor] refactor sdk test and processArgument.
    
    * [type:refactor] refactor sdk test and processArgument.
    
    * [type:refactor] refactor sdk test and processArgument.
---
 .../consumer/api/ShenyuAlibabaDubboClientApi.java  |  5 +-
 .../consumer/api/ShenyuApacheDubboClientApi.java   |  5 +-
 .../src/main/http/sdk-http-test-api.http           |  6 +--
 .../examples/sdk/http/api/ShenyuHttpClientApi.java |  3 +-
 .../org/apache/shenyu/sdk/core/ShenyuRequest.java  | 53 ++++++++++++++++------
 .../sdk/core/client/AbstractShenyuSdkClient.java   |  8 ++--
 .../shenyu/sdk/core/common/RequestTemplate.java    |  2 +-
 .../shenyu/sdk/spring/ShenyuClientsRegistrar.java  |  5 +-
 .../annotation/CookieValueParameterProcessor.java  | 11 +++--
 .../annotation/PathVariableParameterProcessor.java |  6 ++-
 .../annotation/RequestBodyParameterProcessor.java  |  8 ++--
 .../RequestHeaderParameterProcessor.java           | 14 ++++--
 .../annotation/RequestParamParameterProcessor.java |  6 ++-
 .../factory/AnnotatedParameterProcessor.java       |  6 +--
 .../proxy/ShenyuClientInvocationHandler.java       |  3 +-
 .../spring/proxy/ShenyuClientMethodHandler.java    |  5 +-
 16 files changed, 96 insertions(+), 50 deletions(-)

diff --git a/shenyu-examples/shenyu-examples-sdk/shenyu-examples-sdk-dubbo/shenyu-examples-sdk-alibaba-dubbo-consumer/src/main/java/org/apache/shenyu/examples/sdk/alibaba/dubbo/consumer/api/ShenyuAlibabaDubboClientApi.java b/shenyu-examples/shenyu-examples-sdk/shenyu-examples-sdk-dubbo/shenyu-examples-sdk-alibaba-dubbo-consumer/src/main/java/org/apache/shenyu/examples/sdk/alibaba/dubbo/consumer/api/ShenyuAlibabaDubboClientApi.java
index 7e4f5cc25..c35822feb 100644
--- a/shenyu-examples/shenyu-examples-sdk/shenyu-examples-sdk-dubbo/shenyu-examples-sdk-alibaba-dubbo-consumer/src/main/java/org/apache/shenyu/examples/sdk/alibaba/dubbo/consumer/api/ShenyuAlibabaDubboClientApi.java
+++ b/shenyu-examples/shenyu-examples-sdk/shenyu-examples-sdk-dubbo/shenyu-examples-sdk-alibaba-dubbo-consumer/src/main/java/org/apache/shenyu/examples/sdk/alibaba/dubbo/consumer/api/ShenyuAlibabaDubboClientApi.java
@@ -17,7 +17,6 @@
 
 package org.apache.shenyu.examples.sdk.alibaba.dubbo.consumer.api;
 
-import java.util.List;
 import org.apache.shenyu.examples.dubbo.api.entity.ComplexBeanTest;
 import org.apache.shenyu.examples.dubbo.api.entity.DubboTest;
 import org.apache.shenyu.examples.dubbo.api.entity.ListResp;
@@ -29,10 +28,12 @@ import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RequestParam;
 
+import java.util.List;
+
 /**
  * ShenyuApacheDubboClientApi.
  */
-@ShenyuClient(contextId = "shenyu-gateway", name = "ShenyuSdkApiName")
+@ShenyuClient("shenyu-gateway")
 public interface ShenyuAlibabaDubboClientApi {
 
     /**
diff --git a/shenyu-examples/shenyu-examples-sdk/shenyu-examples-sdk-dubbo/shenyu-examples-sdk-apache-dubbo-consumer/src/main/java/org/apache/shenyu/examples/sdk/apache/dubbo/consumer/api/ShenyuApacheDubboClientApi.java b/shenyu-examples/shenyu-examples-sdk/shenyu-examples-sdk-dubbo/shenyu-examples-sdk-apache-dubbo-consumer/src/main/java/org/apache/shenyu/examples/sdk/apache/dubbo/consumer/api/ShenyuApacheDubboClientApi.java
index 9900186fd..b183c3d93 100644
--- a/shenyu-examples/shenyu-examples-sdk/shenyu-examples-sdk-dubbo/shenyu-examples-sdk-apache-dubbo-consumer/src/main/java/org/apache/shenyu/examples/sdk/apache/dubbo/consumer/api/ShenyuApacheDubboClientApi.java
+++ b/shenyu-examples/shenyu-examples-sdk/shenyu-examples-sdk-dubbo/shenyu-examples-sdk-apache-dubbo-consumer/src/main/java/org/apache/shenyu/examples/sdk/apache/dubbo/consumer/api/ShenyuApacheDubboClientApi.java
@@ -17,7 +17,6 @@
 
 package org.apache.shenyu.examples.sdk.apache.dubbo.consumer.api;
 
-import java.util.List;
 import org.apache.shenyu.examples.dubbo.api.entity.ComplexBeanTest;
 import org.apache.shenyu.examples.dubbo.api.entity.DubboTest;
 import org.apache.shenyu.examples.dubbo.api.entity.ListResp;
@@ -29,10 +28,12 @@ import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RequestParam;
 
+import java.util.List;
+
 /**
  * ShenyuApacheDubboClientApi.
  */
-@ShenyuClient(contextId = "shenyu-gateway", name = "ShenyuSdkApiName")
+@ShenyuClient("shenyu-gateway")
 public interface ShenyuApacheDubboClientApi {
 
     /**
diff --git a/shenyu-examples/shenyu-examples-sdk/shenyu-examples-sdk-http/src/main/http/sdk-http-test-api.http b/shenyu-examples/shenyu-examples-sdk/shenyu-examples-sdk-http/src/main/http/sdk-http-test-api.http
index f2e3be4e9..83b4215ce 100644
--- a/shenyu-examples/shenyu-examples-sdk/shenyu-examples-sdk-http/src/main/http/sdk-http-test-api.http
+++ b/shenyu-examples/shenyu-examples-sdk/shenyu-examples-sdk-http/src/main/http/sdk-http-test-api.http
@@ -17,12 +17,12 @@
 
 
 ### shengyu sdk http findById
-GET http://localhost:8899/sdk/findById?id=1
+GET http://localhost:8899/sdk/http/findById?id=1
 Accept: application/json
 Content-Type: application/json
 
-### shengyu sdk annoTest
-POST http://localhost:8899/sdk/annoTest
+### shengyu sdk http annoTest
+POST http://localhost:8899/sdk/http/annoTest
 Accept: application/json
 Content-Type: application/json
 
diff --git a/shenyu-examples/shenyu-examples-sdk/shenyu-examples-sdk-http/src/main/java/org/apache/shenyu/examples/sdk/http/api/ShenyuHttpClientApi.java b/shenyu-examples/shenyu-examples-sdk/shenyu-examples-sdk-http/src/main/java/org/apache/shenyu/examples/sdk/http/api/ShenyuHttpClientApi.java
index 4d77f2566..e37ab6c15 100644
--- a/shenyu-examples/shenyu-examples-sdk/shenyu-examples-sdk-http/src/main/java/org/apache/shenyu/examples/sdk/http/api/ShenyuHttpClientApi.java
+++ b/shenyu-examples/shenyu-examples-sdk/shenyu-examples-sdk-http/src/main/java/org/apache/shenyu/examples/sdk/http/api/ShenyuHttpClientApi.java
@@ -29,8 +29,9 @@ import org.springframework.web.bind.annotation.RequestParam;
 
 /**
  * ShenyuHttpClientApi.
+ * request local HttpServiceController.
  */
-@ShenyuClient(contextId = "shenyu-gateway", name = "ShenyuSdkApiName")
+@ShenyuClient("shenyu-gateway")
 public interface ShenyuHttpClientApi {
 
     /**
diff --git a/shenyu-sdk/shenyu-sdk-core/src/main/java/org/apache/shenyu/sdk/core/ShenyuRequest.java b/shenyu-sdk/shenyu-sdk-core/src/main/java/org/apache/shenyu/sdk/core/ShenyuRequest.java
index 1ccc785e7..b5dad1a4e 100644
--- a/shenyu-sdk/shenyu-sdk-core/src/main/java/org/apache/shenyu/sdk/core/ShenyuRequest.java
+++ b/shenyu-sdk/shenyu-sdk-core/src/main/java/org/apache/shenyu/sdk/core/ShenyuRequest.java
@@ -32,13 +32,13 @@ public final class ShenyuRequest implements Serializable {
 
     private final HttpMethod httpMethod;
 
-    private final String url;
+    private String url;
 
-    private final String contextId;
+    private final String name;
 
-    private final Map<String, Collection<String>> headers;
+    private Map<String, Collection<String>> headers;
 
-    private final String body;
+    private String body;
 
     private final RequestTemplate requestTemplate;
 
@@ -55,14 +55,14 @@ public final class ShenyuRequest implements Serializable {
                   final String url,
                   final Map<String, Collection<String>> headers,
                   final String body,
-                  final String contextId,
+                  final String name,
                   final RequestTemplate requestTemplate) {
         this.httpMethod = checkNotNull(method, "httpMethod of %s", method.name());
         this.url = checkNotNull(url, "url");
         this.headers = checkNotNull(headers, "headers of %s %s", method, url);
         this.body = body;
         this.requestTemplate = requestTemplate;
-        this.contextId = contextId;
+        this.name = name;
     }
 
     public enum HttpMethod {
@@ -81,16 +81,16 @@ public final class ShenyuRequest implements Serializable {
      * @param headers to include.
      * @param body of the request, can be {@literal null}
      * @param requestTemplate requestTemplate
-     * @param contextId contextId
+     * @param name contextId
      * @return a Request
      */
     public static ShenyuRequest create(final HttpMethod httpMethod,
                                        final String url,
                                        final Map<String, Collection<String>> headers,
                                        final String body,
-                                       final String contextId,
+                                       final String name,
                                        final RequestTemplate requestTemplate) {
-        return new ShenyuRequest(httpMethod, url, headers, body, contextId, requestTemplate);
+        return new ShenyuRequest(httpMethod, url, headers, body, name, requestTemplate);
     }
 
     /**
@@ -101,7 +101,7 @@ public final class ShenyuRequest implements Serializable {
      * @return a Request
      */
     public static ShenyuRequest create(final String url, final ShenyuRequest request) {
-        return new ShenyuRequest(request.getHttpMethod(), url, request.getHeaders(), request.getBody(), request.getContextId(), request.getRequestTemplate());
+        return new ShenyuRequest(request.getHttpMethod(), url, request.getHeaders(), request.getBody(), request.getName(), request.getRequestTemplate());
     }
 
     /**
@@ -150,11 +150,38 @@ public final class ShenyuRequest implements Serializable {
     }
 
     /**
-     * getContextId.
+     * getName.
      *
      * @return {@link String}
      */
-    public String getContextId() {
-        return contextId;
+    public String getName() {
+        return name;
+    }
+
+    /**
+     * setUrl.
+     *
+     * @param url url
+     */
+    public void setUrl(final String url) {
+        this.url = url;
+    }
+
+    /**
+     * setHeaders.
+     *
+     * @param headers headers
+     */
+    public void setHeaders(final Map<String, Collection<String>> headers) {
+        this.headers = headers;
+    }
+
+    /**
+     * setBody.
+     *
+     * @param body body
+     */
+    public void setBody(final String body) {
+        this.body = body;
     }
 }
diff --git a/shenyu-sdk/shenyu-sdk-core/src/main/java/org/apache/shenyu/sdk/core/client/AbstractShenyuSdkClient.java b/shenyu-sdk/shenyu-sdk-core/src/main/java/org/apache/shenyu/sdk/core/client/AbstractShenyuSdkClient.java
index b07674748..5f5d2412a 100644
--- a/shenyu-sdk/shenyu-sdk-core/src/main/java/org/apache/shenyu/sdk/core/client/AbstractShenyuSdkClient.java
+++ b/shenyu-sdk/shenyu-sdk-core/src/main/java/org/apache/shenyu/sdk/core/client/AbstractShenyuSdkClient.java
@@ -162,11 +162,11 @@ public abstract class AbstractShenyuSdkClient implements ShenyuSdkClient {
                     .map(serverAddress -> Upstream.builder().url(UriUtils.appendScheme(serverAddress, scheme)).build())
                     .collect(Collectors.toList());
         } else {
-            List<InstanceEntity> instanceRegisters = watcherInstanceRegisterMap.get(request.getContextId());
+            List<InstanceEntity> instanceRegisters = watcherInstanceRegisterMap.get(request.getName());
             if (instanceRegisters == null) {
-                instanceRegisters = registerRepository.selectInstancesAndWatcher(request.getContextId(),
-                    instanceRegisterDTOs -> watcherInstanceRegisterMap.put(request.getContextId(), instanceRegisterDTOs));
-                watcherInstanceRegisterMap.put(request.getContextId(), instanceRegisters);
+                instanceRegisters = registerRepository.selectInstancesAndWatcher(request.getName(),
+                    instanceRegisterDTOs -> watcherInstanceRegisterMap.put(request.getName(), instanceRegisterDTOs));
+                watcherInstanceRegisterMap.put(request.getName(), instanceRegisters);
             }
             if (ObjectUtils.isEmpty(instanceRegisters)) {
                 throw new ShenyuException("Gateway address not found from registry.");
diff --git a/shenyu-sdk/shenyu-sdk-core/src/main/java/org/apache/shenyu/sdk/core/common/RequestTemplate.java b/shenyu-sdk/shenyu-sdk-core/src/main/java/org/apache/shenyu/sdk/core/common/RequestTemplate.java
index fcaf7b2f8..d2d9df6c1 100644
--- a/shenyu-sdk/shenyu-sdk-core/src/main/java/org/apache/shenyu/sdk/core/common/RequestTemplate.java
+++ b/shenyu-sdk/shenyu-sdk-core/src/main/java/org/apache/shenyu/sdk/core/common/RequestTemplate.java
@@ -79,7 +79,7 @@ public final class RequestTemplate {
      * @return {@link ShenyuRequest}
      */
     public ShenyuRequest request() {
-        return ShenyuRequest.create(this.httpMethod, this.url + this.path, this.headers, this.body, contextId, this);
+        return ShenyuRequest.create(this.httpMethod, this.url + this.path, new HashMap<>(this.headers), this.body, name, this);
     }
 
     /**
diff --git a/shenyu-sdk/shenyu-sdk-spring/src/main/java/org/apache/shenyu/sdk/spring/ShenyuClientsRegistrar.java b/shenyu-sdk/shenyu-sdk-spring/src/main/java/org/apache/shenyu/sdk/spring/ShenyuClientsRegistrar.java
index 9ca40a52b..6d2c9f7a9 100644
--- a/shenyu-sdk/shenyu-sdk-spring/src/main/java/org/apache/shenyu/sdk/spring/ShenyuClientsRegistrar.java
+++ b/shenyu-sdk/shenyu-sdk-spring/src/main/java/org/apache/shenyu/sdk/spring/ShenyuClientsRegistrar.java
@@ -53,6 +53,7 @@ import java.util.HashSet;
 import java.util.LinkedHashSet;
 import java.util.List;
 import java.util.Map;
+import java.util.Optional;
 import java.util.Set;
 
 /**
@@ -172,7 +173,7 @@ public class ShenyuClientsRegistrar implements ImportBeanDefinitionRegistrar, Re
 
         String[] qualifiers = getQualifiers(attributes);
         if (ObjectUtils.isEmpty(qualifiers)) {
-            qualifiers = new String[] {contextId + "ShenyuClient"};
+            qualifiers = new String[] {Optional.ofNullable(contextId).orElse(name) + "ShenyuClient"};
         }
         BeanDefinitionHolder holder = new BeanDefinitionHolder(beanDefinition, className, qualifiers);
         BeanDefinitionReaderUtils.registerBeanDefinition(holder, registry);
@@ -181,7 +182,7 @@ public class ShenyuClientsRegistrar implements ImportBeanDefinitionRegistrar, Re
 
     private void validate(final Map<String, Object> attributes) {
         AnnotationAttributes annotation = AnnotationAttributes.fromMap(attributes);
-        // This blows up if an aliased property is overspecified
+        // This blows up if an aliased property is over specified
         validateFallback(annotation.getClass("fallback"));
         validateFallbackFactory(annotation.getClass("fallbackFactory"));
     }
diff --git a/shenyu-sdk/shenyu-sdk-spring/src/main/java/org/apache/shenyu/sdk/spring/annotation/CookieValueParameterProcessor.java b/shenyu-sdk/shenyu-sdk-spring/src/main/java/org/apache/shenyu/sdk/spring/annotation/CookieValueParameterProcessor.java
index 6016c93d4..208e7acf6 100644
--- a/shenyu-sdk/shenyu-sdk-spring/src/main/java/org/apache/shenyu/sdk/spring/annotation/CookieValueParameterProcessor.java
+++ b/shenyu-sdk/shenyu-sdk-spring/src/main/java/org/apache/shenyu/sdk/spring/annotation/CookieValueParameterProcessor.java
@@ -17,6 +17,7 @@
 
 package org.apache.shenyu.sdk.spring.annotation;
 
+import org.apache.shenyu.sdk.core.ShenyuRequest;
 import org.apache.shenyu.sdk.core.common.RequestTemplate;
 import org.apache.shenyu.sdk.spring.factory.AnnotatedParameterProcessor;
 import org.springframework.http.HttpHeaders;
@@ -25,6 +26,7 @@ import org.springframework.web.bind.annotation.CookieValue;
 import java.lang.annotation.Annotation;
 import java.util.ArrayList;
 import java.util.Collection;
+import java.util.Map;
 
 import static com.google.common.base.Strings.emptyToNull;
 import static org.apache.shenyu.sdk.core.util.Util.checkState;
@@ -43,14 +45,17 @@ public class CookieValueParameterProcessor implements AnnotatedParameterProcesso
     }
 
     @Override
-    public boolean processArgument(final RequestTemplate requestTemplate, final Annotation annotation, final Object arg) {
+    public boolean processArgument(final ShenyuRequest shenyuRequest, final Annotation annotation, final Object arg) {
+        RequestTemplate requestTemplate = shenyuRequest.getRequestTemplate();
         CookieValue cookie = ANNOTATION.cast(annotation);
         String name = cookie.value().trim();
         checkState(emptyToNull(name) != null, "Cookie.name() was empty on parameter %s", requestTemplate.getMethod());
         Collection<String> cookieExpression = requestTemplate.getHeaders().getOrDefault(HttpHeaders.COOKIE, new ArrayList<>());
         cookieExpression.add(String.format("%s=%s", name, arg));
-        requestTemplate.getHeaders().remove(HttpHeaders.COOKIE);
-        requestTemplate.getHeaders().put(HttpHeaders.COOKIE, cookieExpression);
+        Map<String, Collection<String>> headers = shenyuRequest.getHeaders();
+        headers.remove(HttpHeaders.COOKIE);
+        headers.put(HttpHeaders.COOKIE, cookieExpression);
+        shenyuRequest.setHeaders(headers);
         return true;
     }
 
diff --git a/shenyu-sdk/shenyu-sdk-spring/src/main/java/org/apache/shenyu/sdk/spring/annotation/PathVariableParameterProcessor.java b/shenyu-sdk/shenyu-sdk-spring/src/main/java/org/apache/shenyu/sdk/spring/annotation/PathVariableParameterProcessor.java
index 4456da951..5822ee752 100644
--- a/shenyu-sdk/shenyu-sdk-spring/src/main/java/org/apache/shenyu/sdk/spring/annotation/PathVariableParameterProcessor.java
+++ b/shenyu-sdk/shenyu-sdk-spring/src/main/java/org/apache/shenyu/sdk/spring/annotation/PathVariableParameterProcessor.java
@@ -18,6 +18,7 @@
 package org.apache.shenyu.sdk.spring.annotation;
 
 import org.apache.commons.lang3.RegExUtils;
+import org.apache.shenyu.sdk.core.ShenyuRequest;
 import org.apache.shenyu.sdk.core.common.RequestTemplate;
 import org.apache.shenyu.sdk.spring.factory.AnnotatedParameterProcessor;
 import org.springframework.web.bind.annotation.PathVariable;
@@ -40,14 +41,15 @@ public class PathVariableParameterProcessor implements AnnotatedParameterProcess
     }
 
     @Override
-    public boolean processArgument(final RequestTemplate requestTemplate, final Annotation annotation, final Object arg) {
+    public boolean processArgument(final ShenyuRequest shenyuRequest, final Annotation annotation, final Object arg) {
         String name = ANNOTATION.cast(annotation).value();
+        RequestTemplate requestTemplate = shenyuRequest.getRequestTemplate();
         checkState(emptyToNull(name) != null, "PathVariable annotation was empty on param %s.", requestTemplate.getMethod());
         checkState(arg instanceof String, "PathVariable Object class pls is String %s.", requestTemplate.getMethod());
         String varName = "{" + name + "}";
         String varNameRegex = "\\{" + name + "\\}";
         if (requestTemplate.getPath().contains(varName)) {
-            requestTemplate.setPath(RegExUtils.replaceAll(requestTemplate.getPath(), varNameRegex, String.valueOf(arg)));
+            shenyuRequest.setUrl(requestTemplate.getUrl() + RegExUtils.replaceAll(requestTemplate.getPath(), varNameRegex, String.valueOf(arg)));
         }
         return true;
     }
diff --git a/shenyu-sdk/shenyu-sdk-spring/src/main/java/org/apache/shenyu/sdk/spring/annotation/RequestBodyParameterProcessor.java b/shenyu-sdk/shenyu-sdk-spring/src/main/java/org/apache/shenyu/sdk/spring/annotation/RequestBodyParameterProcessor.java
index 27e06e1a2..b00575363 100644
--- a/shenyu-sdk/shenyu-sdk-spring/src/main/java/org/apache/shenyu/sdk/spring/annotation/RequestBodyParameterProcessor.java
+++ b/shenyu-sdk/shenyu-sdk-spring/src/main/java/org/apache/shenyu/sdk/spring/annotation/RequestBodyParameterProcessor.java
@@ -18,7 +18,7 @@
 package org.apache.shenyu.sdk.spring.annotation;
 
 import org.apache.shenyu.common.utils.JsonUtils;
-import org.apache.shenyu.sdk.core.common.RequestTemplate;
+import org.apache.shenyu.sdk.core.ShenyuRequest;
 import org.apache.shenyu.sdk.spring.factory.AnnotatedParameterProcessor;
 import org.springframework.web.bind.annotation.RequestBody;
 
@@ -37,11 +37,11 @@ public class RequestBodyParameterProcessor implements AnnotatedParameterProcesso
     }
 
     @Override
-    public boolean processArgument(final RequestTemplate requestTemplate, final Annotation annotation, final Object arg) {
+    public boolean processArgument(final ShenyuRequest shenyuRequest, final Annotation annotation, final Object arg) {
         if (arg instanceof String) {
-            requestTemplate.setBody((String) arg);
+            shenyuRequest.setBody((String) arg);
         } else {
-            requestTemplate.setBody(JsonUtils.toJson(arg));
+            shenyuRequest.setBody(JsonUtils.toJson(arg));
         }
         return true;
     }
diff --git a/shenyu-sdk/shenyu-sdk-spring/src/main/java/org/apache/shenyu/sdk/spring/annotation/RequestHeaderParameterProcessor.java b/shenyu-sdk/shenyu-sdk-spring/src/main/java/org/apache/shenyu/sdk/spring/annotation/RequestHeaderParameterProcessor.java
index c3d7119df..2ec40efe6 100644
--- a/shenyu-sdk/shenyu-sdk-spring/src/main/java/org/apache/shenyu/sdk/spring/annotation/RequestHeaderParameterProcessor.java
+++ b/shenyu-sdk/shenyu-sdk-spring/src/main/java/org/apache/shenyu/sdk/spring/annotation/RequestHeaderParameterProcessor.java
@@ -17,6 +17,7 @@
 
 package org.apache.shenyu.sdk.spring.annotation;
 
+import org.apache.shenyu.sdk.core.ShenyuRequest;
 import org.apache.shenyu.sdk.core.common.RequestTemplate;
 import org.apache.shenyu.sdk.spring.factory.AnnotatedParameterProcessor;
 import org.springframework.web.bind.annotation.RequestHeader;
@@ -43,20 +44,23 @@ public class RequestHeaderParameterProcessor implements AnnotatedParameterProces
     }
 
     @Override
-    public boolean processArgument(final RequestTemplate requestTemplate, final Annotation annotation, final Object arg) {
+    public boolean processArgument(final ShenyuRequest shenyuRequest, final Annotation annotation, final Object arg) {
         String name = ANNOTATION.cast(annotation).value();
+        RequestTemplate requestTemplate = shenyuRequest.getRequestTemplate();
         checkState(emptyToNull(name) != null, "RequestHeader.value() was empty on parameter %s", requestTemplate.getMethod().getName());
-        final Map<String, Collection<String>> requestTemplateHeaders = requestTemplate.getHeaders();
+        Map<String, Collection<String>> headers = shenyuRequest.getHeaders();
         if (arg instanceof Map) {
             ((Map<?, ?>) arg).forEach((key, value) -> {
                 if (key instanceof String && value instanceof Collection) {
-                    requestTemplateHeaders.put((String) key, (Collection) value);
+                    headers.put((String) key, (Collection) value);
+                    shenyuRequest.setHeaders(headers);
                 }
             });
         } else if (arg instanceof String) {
-            Collection<String> headerColl = Optional.ofNullable(requestTemplate.getHeaders().get(name)).orElseGet(ArrayList::new);
+            Collection<String> headerColl = Optional.ofNullable(headers.get(name)).orElseGet(ArrayList::new);
             headerColl.add((String) arg);
-            requestTemplate.getHeaders().put(name, headerColl);
+            headers.put(name, headerColl);
+            shenyuRequest.setHeaders(headers);
         }
         return true;
     }
diff --git a/shenyu-sdk/shenyu-sdk-spring/src/main/java/org/apache/shenyu/sdk/spring/annotation/RequestParamParameterProcessor.java b/shenyu-sdk/shenyu-sdk-spring/src/main/java/org/apache/shenyu/sdk/spring/annotation/RequestParamParameterProcessor.java
index 58746a9a3..c9f5854d9 100644
--- a/shenyu-sdk/shenyu-sdk-spring/src/main/java/org/apache/shenyu/sdk/spring/annotation/RequestParamParameterProcessor.java
+++ b/shenyu-sdk/shenyu-sdk-spring/src/main/java/org/apache/shenyu/sdk/spring/annotation/RequestParamParameterProcessor.java
@@ -17,6 +17,7 @@
 
 package org.apache.shenyu.sdk.spring.annotation;
 
+import org.apache.shenyu.sdk.core.ShenyuRequest;
 import org.apache.shenyu.sdk.core.common.RequestTemplate;
 import org.apache.shenyu.sdk.spring.factory.AnnotatedParameterProcessor;
 import org.springframework.web.bind.annotation.RequestParam;
@@ -40,7 +41,8 @@ public class RequestParamParameterProcessor implements AnnotatedParameterProcess
     }
 
     @Override
-    public boolean processArgument(final RequestTemplate requestTemplate, final Annotation annotation, final Object arg) {
+    public boolean processArgument(final ShenyuRequest shenyuRequest, final Annotation annotation, final Object arg) {
+        RequestTemplate requestTemplate = shenyuRequest.getRequestTemplate();
         RequestParam requestParam = ANNOTATION.cast(annotation);
         String name = requestParam.value();
         checkState(emptyToNull(name) != null, "RequestParam.value() was empty on parameter %s#%s",
@@ -58,7 +60,7 @@ public class RequestParamParameterProcessor implements AnnotatedParameterProcess
                 pathResult.append(key).append("=").append(value);
             });
         }
-        requestTemplate.setPath(pathResult.toString());
+        shenyuRequest.setUrl(requestTemplate.getUrl() + pathResult);
         return true;
     }
 
diff --git a/shenyu-sdk/shenyu-sdk-spring/src/main/java/org/apache/shenyu/sdk/spring/factory/AnnotatedParameterProcessor.java b/shenyu-sdk/shenyu-sdk-spring/src/main/java/org/apache/shenyu/sdk/spring/factory/AnnotatedParameterProcessor.java
index f7e7e933f..73673a011 100644
--- a/shenyu-sdk/shenyu-sdk-spring/src/main/java/org/apache/shenyu/sdk/spring/factory/AnnotatedParameterProcessor.java
+++ b/shenyu-sdk/shenyu-sdk-spring/src/main/java/org/apache/shenyu/sdk/spring/factory/AnnotatedParameterProcessor.java
@@ -17,7 +17,7 @@
 
 package org.apache.shenyu.sdk.spring.factory;
 
-import org.apache.shenyu.sdk.core.common.RequestTemplate;
+import org.apache.shenyu.sdk.core.ShenyuRequest;
 
 import java.lang.annotation.Annotation;
 
@@ -45,11 +45,11 @@ public interface AnnotatedParameterProcessor {
     /**
      * Process the annotated parameter.
      *
-     * @param requestTemplate requestTemplate
+     * @param shenyuRequest shenyuRequest
      * @param annotation annotation
      * @param arg arg
      * @return {@link boolean}
      */
-    boolean processArgument(RequestTemplate requestTemplate, Annotation annotation, Object arg);
+    boolean processArgument(ShenyuRequest shenyuRequest, Annotation annotation, Object arg);
 
 }
diff --git a/shenyu-sdk/shenyu-sdk-spring/src/main/java/org/apache/shenyu/sdk/spring/proxy/ShenyuClientInvocationHandler.java b/shenyu-sdk/shenyu-sdk-spring/src/main/java/org/apache/shenyu/sdk/spring/proxy/ShenyuClientInvocationHandler.java
index 15aca3699..277bcc161 100644
--- a/shenyu-sdk/shenyu-sdk-spring/src/main/java/org/apache/shenyu/sdk/spring/proxy/ShenyuClientInvocationHandler.java
+++ b/shenyu-sdk/shenyu-sdk-spring/src/main/java/org/apache/shenyu/sdk/spring/proxy/ShenyuClientInvocationHandler.java
@@ -36,6 +36,7 @@ import java.util.Comparator;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
+import java.util.Optional;
 import java.util.concurrent.ConcurrentHashMap;
 import java.util.stream.Collectors;
 
@@ -82,7 +83,7 @@ public class ShenyuClientInvocationHandler implements InvocationHandler {
         for (RequestTemplate requestTemplate : requestTemplates) {
             requestTemplate.setUrl(shenyuClientFactoryBean.getUrl());
             requestTemplate.setName(shenyuClientFactoryBean.getName());
-            requestTemplate.setContextId(shenyuClientFactoryBean.getContextId());
+            requestTemplate.setContextId(Optional.ofNullable(shenyuClientFactoryBean.getContextId()).orElse(shenyuClientFactoryBean.getName()));
             if (StringUtils.hasText(shenyuClientFactoryBean.getPath())) {
                 requestTemplate.setPath(shenyuClientFactoryBean.getPath() + "/" + requestTemplate.getPath());
             }
diff --git a/shenyu-sdk/shenyu-sdk-spring/src/main/java/org/apache/shenyu/sdk/spring/proxy/ShenyuClientMethodHandler.java b/shenyu-sdk/shenyu-sdk-spring/src/main/java/org/apache/shenyu/sdk/spring/proxy/ShenyuClientMethodHandler.java
index 03f115bde..71f6b3483 100644
--- a/shenyu-sdk/shenyu-sdk-spring/src/main/java/org/apache/shenyu/sdk/spring/proxy/ShenyuClientMethodHandler.java
+++ b/shenyu-sdk/shenyu-sdk-spring/src/main/java/org/apache/shenyu/sdk/spring/proxy/ShenyuClientMethodHandler.java
@@ -81,6 +81,7 @@ public class ShenyuClientMethodHandler {
 
     private ShenyuRequest targetProcessor(final RequestTemplate requestTemplate, final Object[] args) {
         final RequestTemplate requestTemplateFrom = RequestTemplate.from(requestTemplate);
+        ShenyuRequest request = requestTemplateFrom.request();
         for (RequestTemplate.ParamMetadata paramMetadata : requestTemplateFrom.getParamMetadataList()) {
             final Annotation[] paramAnnotations = paramMetadata.getParamAnnotations();
             for (Annotation paramAnnotation : paramAnnotations) {
@@ -88,9 +89,9 @@ public class ShenyuClientMethodHandler {
                 if (ObjectUtils.isEmpty(processor)) {
                     continue;
                 }
-                processor.processArgument(requestTemplateFrom, paramAnnotation, args[paramMetadata.getParamIndexOnMethod()]);
+                processor.processArgument(request, paramAnnotation, args[paramMetadata.getParamIndexOnMethod()]);
             }
         }
-        return requestTemplateFrom.request();
+        return request;
     }
 }