You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@shenyu.apache.org by he...@apache.org on 2023/05/05 01:34:21 UTC

[shenyu] branch master updated: [type:refactor] refactor e2e moudle (#4601)

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

hefengen 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 f34c31a12 [type:refactor] refactor e2e moudle (#4601)
f34c31a12 is described below

commit f34c31a12a404328e46257bf5de19d5eac60cd49
Author: SeaChess <80...@users.noreply.github.com>
AuthorDate: Fri May 5 09:34:15 2023 +0800

    [type:refactor] refactor e2e moudle (#4601)
    
    * refactor e2e moudle
    
    * refactor e2e moudle 1
    
    * refactor e2e moudle 2
    
    * refactor e2e moudle 3
    
    * refactor e2e moudle 4
    
    * refactor e2e moudle 5
    
    * refactor e2e moudle 5
    
    ---------
    
    Co-authored-by: moremind <he...@apache.org>
---
 .../e2e/testcase/common/ResourceDataTemplate.java  |  46 ++-
 .../e2e/testcase/common/function/HttpChecker.java  |   3 +
 .../e2e/testcase/common/function/HttpCheckers.java |  23 +-
 .../e2e/testcase/common/function/HttpVerifier.java |   3 +
 .../e2e/testcase/common/function/HttpWaiting.java  |   3 +
 .../testcase/common/function/WaitForHelper.java    |  44 ++-
 .../common/specification/ShenYuAfterEachSpec.java  |  33 +-
 .../common/specification/ShenYuBeforeEachSpec.java |  54 ++-
 .../common/specification/ShenYuCaseSpec.java       |  50 ++-
 .../common/specification/ShenYuScenarioSpec.java   |  59 ++-
 .../shenyu/e2e/client/ExternalServiceClient.java   |  13 +-
 .../shenyu/e2e/client/admin/AdminClient.java       |  23 +-
 .../shenyu/e2e/client/admin/model/MatchMode.java   |   3 +
 .../shenyu/e2e/client/admin/model/Plugin.java      |   9 +-
 .../e2e/client/admin/model/ResourcesData.java      |  70 +++-
 .../e2e/client/admin/model/SelectorType.java       |   3 +
 .../e2e/client/admin/model/ShenYuResult.java       |  62 ++-
 .../e2e/client/admin/model/data/Condition.java     | 243 +++++++++++-
 .../e2e/client/admin/model/data/PluginData.java    |   3 +
 .../client/admin/model/data/QueryCondition.java}   |  12 +-
 .../e2e/client/admin/model/data/ResourceData.java  |   6 +-
 .../e2e/client/admin/model/data/RuleData.java      | 377 +++++++++++++++++-
 .../admin/model/data/RuleQueryCondition.java       | 216 ++++++++++
 .../client/admin/model/data/SearchCondition.java   | 194 ++++++---
 .../e2e/client/admin/model/data/SelectorData.java  | 439 ++++++++++++++++++++-
 .../admin/model/data/SelectorQueryCondition.java   | 226 +++++++++++
 .../admin/model/handle/DivideRuleHandle.java       | 249 +++++++++++-
 .../e2e/client/admin/model/handle/Upstreams.java   | 110 +++++-
 .../admin/model/response/FakeResourceDTO.java      |  43 +-
 .../e2e/client/admin/model/response/LoginInfo.java |  77 +++-
 .../admin/model/response/PaginatedResources.java   |  44 ++-
 .../client/admin/model/response/Pagination.java    |  87 +++-
 .../e2e/client/admin/model/response/PluginDTO.java | 159 +++++++-
 .../client/admin/model/response/ResourceDTO.java   |   1 -
 .../e2e/client/admin/model/response/RuleDTO.java   | 227 ++++++++++-
 .../admin/model/response/SearchedResources.java    | 101 ++++-
 .../client/admin/model/response/SelectorDTO.java   | 288 +++++++++++++-
 .../shenyu/e2e/client/gateway/GatewayClient.java   |  29 +-
 .../org/apache/shenyu/e2e/matcher/RuleMatcher.java |  20 +-
 .../apache/shenyu/e2e/matcher/SelectorMatcher.java |  11 +-
 .../shenyu/e2e/client/admin/AdminClientTest.java   |  14 +-
 .../org/apache/shenyu/e2e/common/IdGenerator.java  |   3 +
 .../org/apache/shenyu/e2e/common/IdManagers.java   |  18 +-
 .../org/apache/shenyu/e2e/common/NameUtils.java    |   3 +
 .../shenyu/e2e/common/RequestLogConsumer.java      |   3 +
 .../org/apache/shenyu/e2e/common/TableView.java    |   5 +
 .../apache/shenyu/e2e/engine/ShenYuExtension.java  |   8 +-
 .../shenyu/e2e/engine/ShenYuExtensionContext.java  |  18 +-
 .../shenyu/e2e/engine/ShenYuLogExtension.java      |   5 +-
 .../e2e/engine/config/ShenYuEngineConfigure.java   | 221 ++++++++++-
 .../scenario/specification/ScenarioSpec.java       |   9 +-
 .../specification/ScenarioSpecLogProxy.java        |   9 +-
 .../e2e/engine/service/DockerServiceCompose.java   |  18 +-
 .../e2e/engine/service/HostServiceCompose.java     |  22 +-
 .../shenyu/e2e/engine/service/NamingResolver.java  |   9 +-
 .../e2e/engine/service/WaitingForStrategies.java   |  17 +-
 .../engine/service/docker/DockerComposeFile.java   |  25 +-
 .../engine/service/docker/ShenYuLogConsumer.java   |   9 +-
 .../apache/shenyu/e2e/engine/ShenYuEngineTest.java |   2 +-
 59 files changed, 3808 insertions(+), 273 deletions(-)

diff --git a/shenyu-e2e/shenyu-e2e-case/src/main/java/org/apache/shenyu/e2e/testcase/common/ResourceDataTemplate.java b/shenyu-e2e/shenyu-e2e-case/src/main/java/org/apache/shenyu/e2e/testcase/common/ResourceDataTemplate.java
index 3c19bfd2b..f91930a8e 100644
--- a/shenyu-e2e/shenyu-e2e-case/src/main/java/org/apache/shenyu/e2e/testcase/common/ResourceDataTemplate.java
+++ b/shenyu-e2e/shenyu-e2e-case/src/main/java/org/apache/shenyu/e2e/testcase/common/ResourceDataTemplate.java
@@ -36,9 +36,18 @@ import javax.annotation.Nonnull;
 import java.util.ArrayList;
 import java.util.List;
 
-// TODO replace it by introducing Auto-Value-Annotations?
+/**
+ * Templates for various entity classes.
+ */
 public class ResourceDataTemplate {
-    
+
+    /**
+     * Build new SelectorBuilder.
+     *
+     * @param name name
+     * @param plugin plugin
+     * @return SelectorData.Builder
+     */
     public static SelectorData.SelectorDataBuilder newSelectorBuilder(@NotNull String name, Plugin plugin) {
         return SelectorData.builder()
                 .name(name)
@@ -51,7 +60,13 @@ public class ResourceDataTemplate {
                 .matchRestful(false)
                 .sort(1);
     }
-    
+
+    /**
+     * Build new RuleBuilder.
+     *
+     * @param name name
+     * @return RuleData.Builder
+     */
     public static RuleData.RuleDataBuilder newRuleBuilder(@Nonnull String name) {
         return newRuleBuilder(name, null);
     }
@@ -66,7 +81,12 @@ public class ResourceDataTemplate {
                 .matchRestful(false)
                 .sort(1);
     }
-    
+
+    /**
+     * Build new DivideRuleHandle.
+     *
+     * @return DivideRuleHandle
+     */
     public static DivideRuleHandle newDivideRuleHandle() {
         return DivideRuleHandle.builder()
                 .loadBalance("hash")
@@ -77,7 +97,15 @@ public class ResourceDataTemplate {
                 .requestMaxSize(10240)
                 .build();
     }
-    
+
+    /**
+     * Build new Condition.
+     *
+     * @param type type
+     * @param opt opt
+     * @param value value
+     * @return Condition
+     */
     public static Condition newCondition(ParamType type, Operator opt, String value) {
         return newCondition(type, opt, null, value);
     }
@@ -96,7 +124,13 @@ public class ResourceDataTemplate {
         list.add(newCondition(type, opt, value));
         return list;
     }
-    
+
+    /**
+     * Build new Upstream.
+     *
+     * @param url url
+     * @return Upstream
+     */
     public static Upstream newUpstream(String url) {
         return Upstream.builder()
                 .upstreamUrl(url)
diff --git a/shenyu-e2e/shenyu-e2e-case/src/main/java/org/apache/shenyu/e2e/testcase/common/function/HttpChecker.java b/shenyu-e2e/shenyu-e2e-case/src/main/java/org/apache/shenyu/e2e/testcase/common/function/HttpChecker.java
index 04f9c9ca2..d76b39ead 100644
--- a/shenyu-e2e/shenyu-e2e-case/src/main/java/org/apache/shenyu/e2e/testcase/common/function/HttpChecker.java
+++ b/shenyu-e2e/shenyu-e2e-case/src/main/java/org/apache/shenyu/e2e/testcase/common/function/HttpChecker.java
@@ -24,6 +24,9 @@ import org.slf4j.MDC;
 
 import java.util.function.Supplier;
 
+/**
+ * Http Checker interface.
+ */
 @FunctionalInterface
 public interface HttpChecker extends Checker, HttpVerifier {
     
diff --git a/shenyu-e2e/shenyu-e2e-case/src/main/java/org/apache/shenyu/e2e/testcase/common/function/HttpCheckers.java b/shenyu-e2e/shenyu-e2e-case/src/main/java/org/apache/shenyu/e2e/testcase/common/function/HttpCheckers.java
index cbcd4fa32..4d2d3480a 100644
--- a/shenyu-e2e/shenyu-e2e-case/src/main/java/org/apache/shenyu/e2e/testcase/common/function/HttpCheckers.java
+++ b/shenyu-e2e/shenyu-e2e-case/src/main/java/org/apache/shenyu/e2e/testcase/common/function/HttpCheckers.java
@@ -25,12 +25,22 @@ import static org.hamcrest.Matchers.lessThan;
 import static org.hamcrest.Matchers.not;
 import static org.hamcrest.Matchers.nullValue;
 
+/**
+ * Check if the endpoint exists.
+ */
 public class HttpCheckers {
     
     public static HttpChecker notExists(String endpoint) {
         return notExists(Method.GET, endpoint);
     }
-    
+
+    /**
+     * Detection endpoint does not exist.
+     *
+     * @param method method
+     * @param endpoint endpoint
+     * @return HttpChecker
+     */
     public static HttpChecker notExists(Method method, String endpoint) {
         return (request) -> {
             try {
@@ -45,11 +55,18 @@ public class HttpCheckers {
             }
         };
     }
-    
+
     public static HttpChecker exists(String endpoint) {
         return exists(Method.GET, endpoint);
     }
-    
+
+    /**
+     * Detection endpoint exists.
+     *
+     * @param method method
+     * @param endpoint endpoint
+     * @return HttpChecker
+     */
     public static HttpChecker exists(Method method, String endpoint) {
         return (request) -> {
             try {
diff --git a/shenyu-e2e/shenyu-e2e-case/src/main/java/org/apache/shenyu/e2e/testcase/common/function/HttpVerifier.java b/shenyu-e2e/shenyu-e2e-case/src/main/java/org/apache/shenyu/e2e/testcase/common/function/HttpVerifier.java
index cea8788eb..fb205e137 100644
--- a/shenyu-e2e/shenyu-e2e-case/src/main/java/org/apache/shenyu/e2e/testcase/common/function/HttpVerifier.java
+++ b/shenyu-e2e/shenyu-e2e-case/src/main/java/org/apache/shenyu/e2e/testcase/common/function/HttpVerifier.java
@@ -19,6 +19,9 @@ package org.apache.shenyu.e2e.testcase.common.function;
 
 import org.apache.shenyu.e2e.engine.scenario.function.Verifier;
 
+/**
+ * Http Verifier interface.
+ */
 public interface HttpVerifier extends Verifier {
 
 }
diff --git a/shenyu-e2e/shenyu-e2e-case/src/main/java/org/apache/shenyu/e2e/testcase/common/function/HttpWaiting.java b/shenyu-e2e/shenyu-e2e-case/src/main/java/org/apache/shenyu/e2e/testcase/common/function/HttpWaiting.java
index 3df1f09bb..c3c079761 100644
--- a/shenyu-e2e/shenyu-e2e-case/src/main/java/org/apache/shenyu/e2e/testcase/common/function/HttpWaiting.java
+++ b/shenyu-e2e/shenyu-e2e-case/src/main/java/org/apache/shenyu/e2e/testcase/common/function/HttpWaiting.java
@@ -23,6 +23,9 @@ import org.apache.shenyu.e2e.engine.scenario.function.Waiting;
 
 import java.util.function.Supplier;
 
+/**
+ * Http Waiting interface.
+ */
 @FunctionalInterface
 public interface HttpWaiting extends Waiting {
     
diff --git a/shenyu-e2e/shenyu-e2e-case/src/main/java/org/apache/shenyu/e2e/testcase/common/function/WaitForHelper.java b/shenyu-e2e/shenyu-e2e-case/src/main/java/org/apache/shenyu/e2e/testcase/common/function/WaitForHelper.java
index 52c107a76..88d4ac0ca 100644
--- a/shenyu-e2e/shenyu-e2e-case/src/main/java/org/apache/shenyu/e2e/testcase/common/function/WaitForHelper.java
+++ b/shenyu-e2e/shenyu-e2e-case/src/main/java/org/apache/shenyu/e2e/testcase/common/function/WaitForHelper.java
@@ -22,10 +22,9 @@ import io.restassured.http.Method;
 import io.restassured.response.ValidatableResponse;
 import io.restassured.specification.RequestSpecification;
 import io.restassured.specification.ResponseSpecification;
-import lombok.AllArgsConstructor;
-import lombok.NoArgsConstructor;
-import lombok.extern.slf4j.Slf4j;
 import org.junit.jupiter.api.Assertions;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.slf4j.MDC;
 
 import java.time.Duration;
@@ -39,10 +38,13 @@ import java.util.concurrent.TimeUnit;
 import java.util.concurrent.TimeoutException;
 import java.util.function.Supplier;
 
-@Slf4j
-@NoArgsConstructor
-@AllArgsConstructor
+/**
+ * Wait for checking endpoint.
+ */
 public class WaitForHelper {
+
+    private static final Logger log = LoggerFactory.getLogger(WaitForHelper.class);
+
     private static final ExecutorService executor = MoreExecutors.getExitingExecutorService((ThreadPoolExecutor) Executors.newFixedThreadPool(1));
     
     public int retryTimes = 30;
@@ -50,7 +52,25 @@ public class WaitForHelper {
     public Duration timeInRetry = Duration.ofSeconds(3);
     
     public Duration timeout = Duration.ofMinutes(3);
-    
+
+    public WaitForHelper() {
+    }
+
+    public WaitForHelper(int retryTimes, Duration timeInRetry, Duration timeout) {
+        this.retryTimes = retryTimes;
+        this.timeInRetry = timeInRetry;
+        this.timeout = timeout;
+    }
+
+    /**
+     * Check if the endpoint is successful. If unsuccessful, retry until the maximum number of times is reached.
+     *
+     * @param supplier supplier
+     * @param method method
+     * @param endpoint endpoint
+     * @param expected expected
+     * @throws TimeoutException TimeoutException
+     */
     public void waitFor(Supplier<RequestSpecification> supplier, Method method, String endpoint, ResponseSpecification expected) throws TimeoutException {
         final Map<String, String> contextMap = MDC.getCopyOfContextMap();
         Future<?> future = executor.submit(() -> {
@@ -87,8 +107,14 @@ public class WaitForHelper {
             throw new TimeoutException("checking endpoint '" + endpoint + "' timeout after " + timeout);
         }
     }
-    
-    
+
+    /**
+     * Check if the endpoint is successful. If unsuccessful, retry until the maximum number of times is reached.
+     *
+     * @param supplier supplier
+     * @param checker checker
+     * @throws TimeoutException TimeoutException
+     */
     public void waitFor(Supplier<RequestSpecification> supplier, HttpChecker checker) throws TimeoutException {
         final Map<String, String> contextMap = MDC.getCopyOfContextMap();
         Future<?> future = executor.submit(() -> {
diff --git a/shenyu-e2e/shenyu-e2e-case/src/main/java/org/apache/shenyu/e2e/testcase/common/specification/ShenYuAfterEachSpec.java b/shenyu-e2e/shenyu-e2e-case/src/main/java/org/apache/shenyu/e2e/testcase/common/specification/ShenYuAfterEachSpec.java
index 4156ea6b4..acd9a1c17 100644
--- a/shenyu-e2e/shenyu-e2e-case/src/main/java/org/apache/shenyu/e2e/testcase/common/specification/ShenYuAfterEachSpec.java
+++ b/shenyu-e2e/shenyu-e2e-case/src/main/java/org/apache/shenyu/e2e/testcase/common/specification/ShenYuAfterEachSpec.java
@@ -17,16 +17,13 @@
 
 package org.apache.shenyu.e2e.testcase.common.specification;
 
-import lombok.AllArgsConstructor;
-import lombok.Builder;
-import lombok.Getter;
 import org.apache.shenyu.e2e.engine.scenario.function.Checker;
 import org.apache.shenyu.e2e.engine.scenario.function.Deleter;
 import org.apache.shenyu.e2e.engine.scenario.specification.AfterEachSpec;
 
-@Getter
-@AllArgsConstructor
-@Builder(toBuilder = true)
+/**
+ * ShenYu after each specification.
+ */
 public class ShenYuAfterEachSpec implements AfterEachSpec {
     
     private final Deleter deleter;
@@ -34,5 +31,27 @@ public class ShenYuAfterEachSpec implements AfterEachSpec {
     private final Checker postChecker;
     
     public static final ShenYuAfterEachSpec DEFAULT = new ShenYuAfterEachSpec(Deleter.DEFAULT, Checker.DEFAULT);
-    
+
+    public ShenYuAfterEachSpec(Deleter deleter, Checker postChecker) {
+        this.deleter = deleter;
+        this.postChecker = postChecker;
+    }
+
+    /**
+     * get deleter.
+     *
+     * @return deleter
+     */
+    public Deleter getDeleter() {
+        return deleter;
+    }
+
+    /**
+     * get postChecker.
+     *
+     * @return postChecker
+     */
+    public Checker getPostChecker() {
+        return postChecker;
+    }
 }
diff --git a/shenyu-e2e/shenyu-e2e-case/src/main/java/org/apache/shenyu/e2e/testcase/common/specification/ShenYuBeforeEachSpec.java b/shenyu-e2e/shenyu-e2e-case/src/main/java/org/apache/shenyu/e2e/testcase/common/specification/ShenYuBeforeEachSpec.java
index d6f46ddb5..0fc547523 100644
--- a/shenyu-e2e/shenyu-e2e-case/src/main/java/org/apache/shenyu/e2e/testcase/common/specification/ShenYuBeforeEachSpec.java
+++ b/shenyu-e2e/shenyu-e2e-case/src/main/java/org/apache/shenyu/e2e/testcase/common/specification/ShenYuBeforeEachSpec.java
@@ -19,9 +19,6 @@ package org.apache.shenyu.e2e.testcase.common.specification;
 
 import io.restassured.http.Method;
 import io.restassured.specification.ResponseSpecification;
-import lombok.AccessLevel;
-import lombok.AllArgsConstructor;
-import lombok.Getter;
 import org.apache.shenyu.e2e.client.admin.model.ResourcesData;
 import org.apache.shenyu.e2e.client.admin.model.ResourcesData.ResourcesDataBuilder;
 import org.apache.shenyu.e2e.client.admin.model.data.RuleData;
@@ -34,20 +31,63 @@ import org.apache.shenyu.e2e.testcase.common.function.HttpWaiting;
 import org.apache.shenyu.e2e.testcase.common.function.WaitForHelper;
 import org.jetbrains.annotations.NotNull;
 
-@Getter
-@AllArgsConstructor(access = AccessLevel.PACKAGE)
+/**
+ * ShenYu before each specification.
+ */
 public class ShenYuBeforeEachSpec implements BeforeEachSpec {
+
     private final Checker checker;
+
     private final ResourcesData resources;
+
     private final Waiting waiting;
-    
+
+   ShenYuBeforeEachSpec(Checker checker, ResourcesData resources, Waiting waiting) {
+        this.checker = checker;
+        this.resources = resources;
+        this.waiting = waiting;
+    }
+
     public static ShenYuBeforeEachSpecBuilder builder() {
         return new ShenYuBeforeEachSpecBuilder();
     }
-    
+
+    /**
+     * get checker.
+     *
+     * @return checker
+     */
+    @Override
+    public Checker getChecker() {
+        return checker;
+    }
+
+    /**
+     * get resources.
+     *
+     * @return  resources
+     */
+    @Override
+    public ResourcesData getResources() {
+        return resources;
+    }
+
+    /**
+     * get waiting.
+     *
+     * @return waiting
+     */
+    @Override
+    public Waiting getWaiting() {
+        return waiting;
+    }
+
     public static class ShenYuBeforeEachSpecBuilder {
+
         private final ResourcesDataBuilder builder = ResourcesData.builder();
+
         private Checker checker = Checker.DEFAULT;
+
         private Waiting waiting = Waiting.DEFAULT;
         
         public ShenYuBeforeEachSpecBuilder checker(@NotNull Checker checker) {
diff --git a/shenyu-e2e/shenyu-e2e-case/src/main/java/org/apache/shenyu/e2e/testcase/common/specification/ShenYuCaseSpec.java b/shenyu-e2e/shenyu-e2e-case/src/main/java/org/apache/shenyu/e2e/testcase/common/specification/ShenYuCaseSpec.java
index 9bf50560f..eb4950b7b 100644
--- a/shenyu-e2e/shenyu-e2e-case/src/main/java/org/apache/shenyu/e2e/testcase/common/specification/ShenYuCaseSpec.java
+++ b/shenyu-e2e/shenyu-e2e-case/src/main/java/org/apache/shenyu/e2e/testcase/common/specification/ShenYuCaseSpec.java
@@ -20,9 +20,6 @@ package org.apache.shenyu.e2e.testcase.common.specification;
 import com.google.common.collect.ImmutableList;
 import com.google.common.collect.ImmutableList.Builder;
 import io.restassured.http.Method;
-import lombok.AllArgsConstructor;
-import lombok.Getter;
-import lombok.NoArgsConstructor;
 import org.apache.shenyu.e2e.engine.scenario.function.Verifier;
 import org.apache.shenyu.e2e.engine.scenario.specification.CaseSpec;
 import org.hamcrest.Matcher;
@@ -32,14 +29,40 @@ import java.util.List;
 import static org.apache.shenyu.e2e.testcase.common.function.HttpCheckers.exists;
 import static org.apache.shenyu.e2e.testcase.common.function.HttpCheckers.notExists;
 
-@Getter
-@AllArgsConstructor
+/**
+ * ShenYu case specification.
+ */
 public class ShenYuCaseSpec implements CaseSpec {
     
     private final String name;
     
     private final List<Verifier> verifiers;
-    
+
+    public ShenYuCaseSpec(String name, List<Verifier> verifiers) {
+        this.name = name;
+        this.verifiers = verifiers;
+    }
+
+    /**
+     * get name.
+     *
+     * @return name
+     */
+    @Override
+    public String getName() {
+        return name;
+    }
+
+    /**
+     * get verifiers.
+     *
+     * @return verifiers
+     */
+    @Override
+    public List<Verifier> getVerifiers() {
+        return verifiers;
+    }
+
     public static ShenYuTestCaseSpecBuilder builder() {
         return new ShenYuTestCaseSpecBuilder();
     }
@@ -47,13 +70,20 @@ public class ShenYuCaseSpec implements CaseSpec {
     public static ShenYuTestCaseSpecBuilder builder(String name) {
         return new ShenYuTestCaseSpecBuilder(name);
     }
-    
-    @NoArgsConstructor
-    @AllArgsConstructor
+
     public static class ShenYuTestCaseSpecBuilder {
+
         private String name;
+
         private final Builder<Verifier> builder = ImmutableList.builder();
-        
+
+        public ShenYuTestCaseSpecBuilder() {
+        }
+
+        public ShenYuTestCaseSpecBuilder(String name) {
+            this.name = name;
+        }
+
         public ShenYuTestCaseSpecBuilder name(String name) {
             this.name = name;
             return this;
diff --git a/shenyu-e2e/shenyu-e2e-case/src/main/java/org/apache/shenyu/e2e/testcase/common/specification/ShenYuScenarioSpec.java b/shenyu-e2e/shenyu-e2e-case/src/main/java/org/apache/shenyu/e2e/testcase/common/specification/ShenYuScenarioSpec.java
index c946dc300..ee6f00cc9 100644
--- a/shenyu-e2e/shenyu-e2e-case/src/main/java/org/apache/shenyu/e2e/testcase/common/specification/ShenYuScenarioSpec.java
+++ b/shenyu-e2e/shenyu-e2e-case/src/main/java/org/apache/shenyu/e2e/testcase/common/specification/ShenYuScenarioSpec.java
@@ -18,8 +18,6 @@
 package org.apache.shenyu.e2e.testcase.common.specification;
 
 import com.google.common.base.Strings;
-import lombok.AllArgsConstructor;
-import lombok.Getter;
 import org.apache.shenyu.e2e.common.IdGenerator;
 import org.apache.shenyu.e2e.engine.scenario.specification.AfterEachSpec;
 import org.apache.shenyu.e2e.engine.scenario.specification.BeforeEachSpec;
@@ -27,8 +25,9 @@ import org.apache.shenyu.e2e.engine.scenario.specification.CaseSpec;
 import org.apache.shenyu.e2e.engine.scenario.specification.ScenarioSpec;
 import org.junit.jupiter.api.Assertions;
 
-@Getter
-@AllArgsConstructor
+/**
+ * ShenYu scenario specification.
+ */
 public class ShenYuScenarioSpec implements ScenarioSpec {
     
     private final String name;
@@ -38,14 +37,64 @@ public class ShenYuScenarioSpec implements ScenarioSpec {
     private final CaseSpec caseSpec;
     
     private final AfterEachSpec afterEachSpec;
-    
+
+    public ShenYuScenarioSpec(String name, BeforeEachSpec beforeEachSpec, CaseSpec caseSpec, AfterEachSpec afterEachSpec) {
+        this.name = name;
+        this.beforeEachSpec = beforeEachSpec;
+        this.caseSpec = caseSpec;
+        this.afterEachSpec = afterEachSpec;
+    }
+
+    /**
+     * get name.
+     *
+     * @return name
+     */
+    @Override
+    public String getName() {
+        return name;
+    }
+
+    /**
+     * get beforeEachSpec.
+     *
+     * @return beforeEachSpec
+     */
+    @Override
+    public BeforeEachSpec getBeforeEachSpec() {
+        return beforeEachSpec;
+    }
+
+    /**
+     * get caseSpec.
+     *
+     * @return caseSpec
+     */
+    @Override
+    public CaseSpec getCaseSpec() {
+        return caseSpec;
+    }
+
+    /**
+     * get afterEachSpec.
+     *
+     * @return afterEachSpec
+     */
+    @Override
+    public AfterEachSpec getAfterEachSpec() {
+        return afterEachSpec;
+    }
+
     public static ShenYuScenarioSpecBuilder builder() {
         return new ShenYuScenarioSpecBuilder();
     }
     
     public static class ShenYuScenarioSpecBuilder {
+
         private String name;
+
         private BeforeEachSpec beforeEachSpec = BeforeEachSpec.DEFAULT;
+
         private AfterEachSpec afterEachSpec = AfterEachSpec.DEFAULT;
         
         private CaseSpec caseSpec;
diff --git a/shenyu-e2e/shenyu-e2e-client/src/main/java/org/apache/shenyu/e2e/client/ExternalServiceClient.java b/shenyu-e2e/shenyu-e2e-client/src/main/java/org/apache/shenyu/e2e/client/ExternalServiceClient.java
index 4cc12430d..a293e197d 100644
--- a/shenyu-e2e/shenyu-e2e-client/src/main/java/org/apache/shenyu/e2e/client/ExternalServiceClient.java
+++ b/shenyu-e2e/shenyu-e2e-client/src/main/java/org/apache/shenyu/e2e/client/ExternalServiceClient.java
@@ -17,12 +17,19 @@
 
 package org.apache.shenyu.e2e.client;
 
-import lombok.AllArgsConstructor;
-
 import java.util.Properties;
 
-@AllArgsConstructor
+/**
+ * External service client.
+ */
 public class ExternalServiceClient {
+
     private final String url;
+
     private final Properties properties;
+
+    public ExternalServiceClient(String url, Properties properties) {
+        this.url = url;
+        this.properties = properties;
+    }
 }
diff --git a/shenyu-e2e/shenyu-e2e-client/src/main/java/org/apache/shenyu/e2e/client/admin/AdminClient.java b/shenyu-e2e/shenyu-e2e-client/src/main/java/org/apache/shenyu/e2e/client/admin/AdminClient.java
index 1cc07cb4c..9481b8f9a 100644
--- a/shenyu-e2e/shenyu-e2e-client/src/main/java/org/apache/shenyu/e2e/client/admin/AdminClient.java
+++ b/shenyu-e2e/shenyu-e2e-client/src/main/java/org/apache/shenyu/e2e/client/admin/AdminClient.java
@@ -23,17 +23,16 @@ import com.google.common.base.Function;
 import com.google.common.base.Preconditions;
 import com.google.common.collect.ImmutableMap;
 import com.google.common.collect.Lists;
-import lombok.extern.slf4j.Slf4j;
 import org.apache.shenyu.e2e.annotation.ShenYuAdminClient;
 import org.apache.shenyu.e2e.client.admin.model.Plugin;
 import org.apache.shenyu.e2e.client.admin.model.ShenYuResult;
+import org.apache.shenyu.e2e.client.admin.model.data.QueryCondition;
 import org.apache.shenyu.e2e.client.admin.model.data.ResourceData;
 import org.apache.shenyu.e2e.client.admin.model.data.RuleData;
+import org.apache.shenyu.e2e.client.admin.model.data.RuleQueryCondition;
 import org.apache.shenyu.e2e.client.admin.model.data.SearchCondition;
-import org.apache.shenyu.e2e.client.admin.model.data.SearchCondition.QueryCondition;
-import org.apache.shenyu.e2e.client.admin.model.data.SearchCondition.RuleQueryCondition;
-import org.apache.shenyu.e2e.client.admin.model.data.SearchCondition.SelectorQueryCondition;
 import org.apache.shenyu.e2e.client.admin.model.data.SelectorData;
+import org.apache.shenyu.e2e.client.admin.model.data.SelectorQueryCondition;
 import org.apache.shenyu.e2e.client.admin.model.response.FakeResourceDTO;
 import org.apache.shenyu.e2e.client.admin.model.response.LoginInfo;
 import org.apache.shenyu.e2e.client.admin.model.response.PaginatedResources;
@@ -46,6 +45,8 @@ import org.apache.shenyu.e2e.common.IdManagers.Rules;
 import org.apache.shenyu.e2e.common.IdManagers.Selectors;
 import org.apache.shenyu.e2e.common.NameUtils;
 import org.junit.jupiter.api.Assertions;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.springframework.boot.web.client.RestTemplateBuilder;
 import org.springframework.http.HttpEntity;
 import org.springframework.http.HttpHeaders;
@@ -61,24 +62,34 @@ import java.util.stream.Collectors;
 
 import static org.apache.shenyu.e2e.client.admin.model.data.SearchCondition.QUERY_ALL;
 
-@Slf4j
+/**
+ * A client to connect to ShenYu Admin.
+ */
 @ShenYuAdminClient
 public class AdminClient {
+
+    private static final Logger log = LoggerFactory.getLogger(AdminClient.class);
+
     private final MultiValueMap<String, String> basicAuth = new HttpHeaders();
+
     private final RestTemplate template = new RestTemplateBuilder().build();
+
     private final ObjectMapper mapper = new ObjectMapper();
     
     private final String scenarioId;
     
     private final String baseURL;
+
     private final ImmutableMap<String, String> loginInfo;
     
     private static final TypeReference<PaginatedResources<PluginDTO>> PAGINATED_PLUGINS_TYPE_REFERENCE = new TypeReference<PaginatedResources<PluginDTO>>() {
     };
     private static final TypeReference<SearchedResources<SelectorDTO>> SEARCHED_SELECTORS_TYPE_REFERENCE = new TypeReference<SearchedResources<SelectorDTO>>() {
     };
+
     private static final TypeReference<SearchedResources<RuleDTO>> SEARCHED_RULES_TYPE_REFERENCE = new TypeReference<SearchedResources<RuleDTO>>() {
     };
+
     private static final TypeReference<SearchedResources<FakeResourceDTO>> FAKE_VALUE_TYPE = new TypeReference<SearchedResources<FakeResourceDTO>>() {
     };
     
@@ -408,7 +419,7 @@ public class AdminClient {
         
         return rst;
     }
-    
+
     @FunctionalInterface
     interface Mapper<IN, OUT> extends Function<IN, OUT> {
     
diff --git a/shenyu-e2e/shenyu-e2e-client/src/main/java/org/apache/shenyu/e2e/client/admin/model/MatchMode.java b/shenyu-e2e/shenyu-e2e-client/src/main/java/org/apache/shenyu/e2e/client/admin/model/MatchMode.java
index 0c0155d31..c7231d95e 100644
--- a/shenyu-e2e/shenyu-e2e-client/src/main/java/org/apache/shenyu/e2e/client/admin/model/MatchMode.java
+++ b/shenyu-e2e/shenyu-e2e-client/src/main/java/org/apache/shenyu/e2e/client/admin/model/MatchMode.java
@@ -21,6 +21,9 @@ import com.fasterxml.jackson.annotation.JsonValue;
 
 import java.util.Locale;
 
+/**
+ * Match mode.
+ */
 public enum MatchMode {
     
     AND(0), OR(1);
diff --git a/shenyu-e2e/shenyu-e2e-client/src/main/java/org/apache/shenyu/e2e/client/admin/model/Plugin.java b/shenyu-e2e/shenyu-e2e-client/src/main/java/org/apache/shenyu/e2e/client/admin/model/Plugin.java
index 5bb9737d3..cac4bb67a 100644
--- a/shenyu-e2e/shenyu-e2e-client/src/main/java/org/apache/shenyu/e2e/client/admin/model/Plugin.java
+++ b/shenyu-e2e/shenyu-e2e-client/src/main/java/org/apache/shenyu/e2e/client/admin/model/Plugin.java
@@ -18,9 +18,10 @@
 package org.apache.shenyu.e2e.client.admin.model;
 
 import com.fasterxml.jackson.annotation.JsonValue;
-import lombok.extern.slf4j.Slf4j;
 import org.apache.shenyu.e2e.client.admin.model.response.PluginDTO;
 import org.junit.jupiter.api.Assertions;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 import java.util.Arrays;
 import java.util.List;
@@ -29,7 +30,9 @@ import java.util.Map;
 import java.util.Objects;
 import java.util.stream.Collectors;
 
-@Slf4j
+/**
+ * Plugin enum.
+ */
 public enum Plugin {
     
     SIGN("sign", 1),
@@ -69,7 +72,7 @@ public enum Plugin {
     LOGGING_PULSAR("loggingPulsar", 35),
     LOGGING_CLICK_HOUSE("loggingClickHouse", 38),
     ;
-    
+    private static final Logger log = LoggerFactory.getLogger(Plugin.class);
     private final String id;
     private final String alias;
     
diff --git a/shenyu-e2e/shenyu-e2e-client/src/main/java/org/apache/shenyu/e2e/client/admin/model/ResourcesData.java b/shenyu-e2e/shenyu-e2e-client/src/main/java/org/apache/shenyu/e2e/client/admin/model/ResourcesData.java
index 7dc5f6fa5..de98f49ad 100644
--- a/shenyu-e2e/shenyu-e2e-client/src/main/java/org/apache/shenyu/e2e/client/admin/model/ResourcesData.java
+++ b/shenyu-e2e/shenyu-e2e-client/src/main/java/org/apache/shenyu/e2e/client/admin/model/ResourcesData.java
@@ -19,23 +19,38 @@ package org.apache.shenyu.e2e.client.admin.model;
 
 import com.google.common.collect.ImmutableList;
 import com.google.common.collect.ImmutableList.Builder;
-import lombok.AccessLevel;
-import lombok.AllArgsConstructor;
-import lombok.Getter;
-import lombok.ToString;
 import org.apache.shenyu.e2e.client.admin.model.data.RuleData;
 import org.apache.shenyu.e2e.client.admin.model.data.SelectorData;
 
-import java.util.ArrayList;
 import java.util.List;
 
-@Getter
-@ToString
-@AllArgsConstructor(access = AccessLevel.PROTECTED)
+/**
+ * ResourcesData.
+ */
 public class ResourcesData {
     
     private final List<Resource> resources;
-    
+
+    private ResourcesData(List<Resource> resources) {
+        this.resources = resources;
+    }
+
+    /**
+     * get resources.
+     *
+     * @return
+     */
+    public List<Resource> getResources() {
+        return resources;
+    }
+
+    @Override
+    public String toString() {
+        return "ResourcesData{" +
+                "resources=" + resources +
+                '}';
+    }
+
     public static ResourcesDataBuilder builder() {
         return new ResourcesDataBuilder();
     }
@@ -53,13 +68,44 @@ public class ResourcesData {
         }
     }
     
-    @Getter
-    @ToString
-    @AllArgsConstructor
+
     public static class Resource {
         
         private final SelectorData selector;
         
         private final List<RuleData> rules; // todo
+
+        private Resource(SelectorData selector, List<RuleData> rules) {
+            this.selector = selector;
+            this.rules = rules;
+        }
+
+        /**
+         * get selector.
+         *
+         * @return selector
+         */
+        public SelectorData getSelector() {
+            return selector;
+        }
+
+        /**
+         * get rules.
+         *
+         * @return rules
+         */
+        public List<RuleData> getRules() {
+            return rules;
+        }
+
+        @Override
+        public String toString() {
+            return "Resource{"
+                    + "selector="
+                    + selector
+                    + ", rules="
+                    + rules
+                    + '}';
+        }
     }
 }
diff --git a/shenyu-e2e/shenyu-e2e-client/src/main/java/org/apache/shenyu/e2e/client/admin/model/SelectorType.java b/shenyu-e2e/shenyu-e2e-client/src/main/java/org/apache/shenyu/e2e/client/admin/model/SelectorType.java
index c1f75e023..9249e4ed1 100644
--- a/shenyu-e2e/shenyu-e2e-client/src/main/java/org/apache/shenyu/e2e/client/admin/model/SelectorType.java
+++ b/shenyu-e2e/shenyu-e2e-client/src/main/java/org/apache/shenyu/e2e/client/admin/model/SelectorType.java
@@ -21,6 +21,9 @@ import com.fasterxml.jackson.annotation.JsonValue;
 
 import java.util.Locale;
 
+/**
+ * Type of selector.
+ */
 public enum SelectorType {
     
     FULL(0), CUSTOM(1);
diff --git a/shenyu-e2e/shenyu-e2e-client/src/main/java/org/apache/shenyu/e2e/client/admin/model/ShenYuResult.java b/shenyu-e2e/shenyu-e2e-client/src/main/java/org/apache/shenyu/e2e/client/admin/model/ShenYuResult.java
index eb4190543..d4e830b7e 100644
--- a/shenyu-e2e/shenyu-e2e-client/src/main/java/org/apache/shenyu/e2e/client/admin/model/ShenYuResult.java
+++ b/shenyu-e2e/shenyu-e2e-client/src/main/java/org/apache/shenyu/e2e/client/admin/model/ShenYuResult.java
@@ -19,13 +19,16 @@ package org.apache.shenyu.e2e.client.admin.model;
 
 import com.fasterxml.jackson.databind.JsonNode;
 import com.fasterxml.jackson.databind.ObjectMapper;
-import lombok.Data;
 
 import java.io.IOException;
 
-@Data
+/**
+ * ShenYu result.
+ */
 public class ShenYuResult {
+
     private int code;
+
     private String message;
     
     private JsonNode data;
@@ -35,5 +38,58 @@ public class ShenYuResult {
     public <Data> Data toObject(Class<Data> type) throws IOException {
         return mapper.readValue(data.traverse(), type);
     }
-    
+
+    /**
+     * get code.
+     *
+     * @return code
+     */
+    public int getCode() {
+        return code;
+    }
+
+    /**
+     * set code.
+     *
+     * @param code code
+     */
+    public void setCode(int code) {
+        this.code = code;
+    }
+
+    /**
+     * get message.
+     *
+     * @return message
+     */
+    public String getMessage() {
+        return message;
+    }
+
+    /**
+     * set message.
+     *
+     * @param message message
+     */
+    public void setMessage(String message) {
+        this.message = message;
+    }
+
+    /**
+     * get data.
+     *
+     * @return data
+     */
+    public JsonNode getData() {
+        return data;
+    }
+
+    /**
+     * set data.
+     *
+     * @param data data
+     */
+    public void setData(JsonNode data) {
+        this.data = data;
+    }
 }
diff --git a/shenyu-e2e/shenyu-e2e-client/src/main/java/org/apache/shenyu/e2e/client/admin/model/data/Condition.java b/shenyu-e2e/shenyu-e2e-client/src/main/java/org/apache/shenyu/e2e/client/admin/model/data/Condition.java
index 281c795e3..8f214abda 100644
--- a/shenyu-e2e/shenyu-e2e-client/src/main/java/org/apache/shenyu/e2e/client/admin/model/data/Condition.java
+++ b/shenyu-e2e/shenyu-e2e-client/src/main/java/org/apache/shenyu/e2e/client/admin/model/data/Condition.java
@@ -18,15 +18,13 @@
 package org.apache.shenyu.e2e.client.admin.model.data;
 
 import com.fasterxml.jackson.annotation.JsonValue;
-import com.fasterxml.jackson.core.JsonProcessingException;
-import com.fasterxml.jackson.databind.ObjectMapper;
-import lombok.Builder;
-import lombok.Data;
 import org.jetbrains.annotations.NotNull;
 
-@Data
-@Builder(toBuilder = true)
+/**
+ * The request condition.
+ */
 public class Condition {
+
     @NotNull
     private ParamType paramType;
     
@@ -36,29 +34,49 @@ public class Condition {
     private String paramName;
     
     private String paramValue;
-    
-    
+
+    /**
+     * The type of param.
+     */
     public enum ParamType {
-        
+
         POST("post"),
-        
+
+        /**
+         * request method.
+         */
         METHOD("req_method"),
-    
+
         URI("uri"),
+
         QUERY("query"),
+
         HEADER("header"),
+
         COOKIE("cookie"),
     
         IP("ip"),
+
         HOST("host"),
-        DOMAIN("domain"),
-        ;
+
+        DOMAIN("domain");
     
         private final String alias;
+
+        /**
+         * set alias.
+         *
+         * @param alias alias
+         */
         ParamType(String alias) {
             this.alias = alias;
         }
-    
+
+        /**
+         * get alias.
+         *
+         * @return alias
+         */
         @JsonValue
         public String getAlias() {
             return alias;
@@ -66,27 +84,214 @@ public class Condition {
     }
     
     public enum Operator {
+
         MATCH("match"),
+
         EQUAL("="),
+
         REGEX("regex"),
+
         CONTAINS("contains"),
+
         TIME_BEFORE("TimeBefore"),
+
         TIME_AFTER("TimeAfter"),
+
         EXCLUDE("exclude"),
+
         STARTS_WITH("startsWith"),
+
         ENDS_WITH("endsWith"),
-        PATH_PATTERN("pathPattern"),
-        ;
-        
+
+        PATH_PATTERN("pathPattern");
+
         private final String alias;
+
+        /**
+         * set alias.
+         *
+         * @param alias alias
+         */
         Operator(String alias) {
             this.alias = alias;
         }
-    
+
+        /**
+         * get alias.
+         *
+         * @return alias
+         */
         @JsonValue
         public String getAlias() {
             return alias;
         }
     }
-    
+
+    /**
+     * builder constructor.
+     *
+     * @param builder builder
+     */
+    private Condition(final Builder builder) {
+        this.paramType = builder.paramType;
+        this.operator = builder.operator;
+        this.paramName = builder.paramName;
+        this.paramValue = builder.paramValue;
+    }
+
+    /**
+     * class builder.
+     *
+     * @return Builder
+     */
+    public static Builder builder() {
+        return new Builder();
+    }
+
+    /**
+     * set paramType.
+     *
+     * @param paramType paramType
+     */
+    public void setParamType(ParamType paramType) {
+        this.paramType = paramType;
+    }
+
+    /**
+     * get paramType.
+     *
+     * @return paramType
+     */
+    public ParamType getParamType() {
+        return paramType;
+    }
+
+    /**
+     * set operator.
+     *
+     * @param operator operator
+     */
+    public void setOperator(Operator operator) {
+        this.operator = operator;
+    }
+
+    /**
+     * get operator.
+     *
+     * @return operator
+     */
+    public Operator getOperator() {
+        return operator;
+    }
+
+    /**
+     * set paramName.
+     *
+     * @param paramName paramName
+     */
+    public void setParamName(String paramName) {
+        this.paramName = paramName;
+    }
+
+    /**
+     * get paramName.
+     *
+     * @return paramName
+     */
+    public String getParamName() {
+        return paramName;
+    }
+
+    /**
+     * set paramValue.
+     *
+     * @param paramValue paramValue
+     */
+    public void setParamValue(String paramValue) {
+        this.paramValue = paramValue;
+    }
+
+    /**
+     * get paramValue.
+     *
+     * @return paramValue
+     */
+    public String getParamValue() {
+        return paramValue;
+    }
+
+    /**
+     * class builder.
+     */
+    public static final class Builder {
+
+        @NotNull
+        private ParamType paramType;
+
+        @NotNull
+        private Operator operator;
+
+        private String paramName;
+
+        private String paramValue;
+
+        /**
+         * no args constructor.
+         */
+        private Builder() {
+        }
+
+        /**
+         * build new Object.
+         *
+         * @return Condition
+         */
+        public Condition build() {
+            return new Condition(this);
+        }
+
+        /**
+         * build paramType.
+         *
+         * @param paramType paramType
+         * @return this
+         */
+        public Builder paramType(final ParamType paramType) {
+            this.paramType = paramType;
+            return this;
+        }
+
+        /**
+         * build operator.
+         *
+         * @param operator operator
+         * @return this
+         */
+        public Builder operator(final Operator operator) {
+            this.operator = operator;
+            return this;
+        }
+
+        /**
+         * build paramName.
+         *
+         * @param paramName paramName
+         * @return this
+         */
+        public Builder paramName(final String paramName) {
+            this.paramName = paramName;
+            return this;
+        }
+
+        /**
+         * build paramValue
+         *
+         * @param paramValue paramValue
+         * @return paramValue
+         */
+        public Builder paramValue(final String paramValue) {
+            this.paramValue = paramValue;
+            return this;
+        }
+    }
 }
diff --git a/shenyu-e2e/shenyu-e2e-client/src/main/java/org/apache/shenyu/e2e/client/admin/model/data/PluginData.java b/shenyu-e2e/shenyu-e2e-client/src/main/java/org/apache/shenyu/e2e/client/admin/model/data/PluginData.java
index 5d8b51450..4616591e6 100644
--- a/shenyu-e2e/shenyu-e2e-client/src/main/java/org/apache/shenyu/e2e/client/admin/model/data/PluginData.java
+++ b/shenyu-e2e/shenyu-e2e-client/src/main/java/org/apache/shenyu/e2e/client/admin/model/data/PluginData.java
@@ -19,6 +19,9 @@ package org.apache.shenyu.e2e.client.admin.model.data;
 
 import org.jetbrains.annotations.NotNull;
 
+/**
+ * Plugin Data.
+ */
 public class PluginData {
     
     private String id;
diff --git a/shenyu-e2e/shenyu-e2e-case/src/main/java/org/apache/shenyu/e2e/testcase/common/function/HttpVerifier.java b/shenyu-e2e/shenyu-e2e-client/src/main/java/org/apache/shenyu/e2e/client/admin/model/data/QueryCondition.java
similarity index 79%
copy from shenyu-e2e/shenyu-e2e-case/src/main/java/org/apache/shenyu/e2e/testcase/common/function/HttpVerifier.java
copy to shenyu-e2e/shenyu-e2e-client/src/main/java/org/apache/shenyu/e2e/client/admin/model/data/QueryCondition.java
index cea8788eb..f14f82995 100644
--- a/shenyu-e2e/shenyu-e2e-case/src/main/java/org/apache/shenyu/e2e/testcase/common/function/HttpVerifier.java
+++ b/shenyu-e2e/shenyu-e2e-client/src/main/java/org/apache/shenyu/e2e/client/admin/model/data/QueryCondition.java
@@ -15,10 +15,16 @@
  * limitations under the License.
  */
 
-package org.apache.shenyu.e2e.testcase.common.function;
+package org.apache.shenyu.e2e.client.admin.model.data;
 
-import org.apache.shenyu.e2e.engine.scenario.function.Verifier;
+/**
+ * the condition of query.
+ */
+public interface QueryCondition {
+
+    String getExcluded();
 
-public interface HttpVerifier extends Verifier {
+    String getKeyword();
 
+    boolean isSwitchStatus();
 }
diff --git a/shenyu-e2e/shenyu-e2e-client/src/main/java/org/apache/shenyu/e2e/client/admin/model/data/ResourceData.java b/shenyu-e2e/shenyu-e2e-client/src/main/java/org/apache/shenyu/e2e/client/admin/model/data/ResourceData.java
index 470f96ece..15232fa3d 100644
--- a/shenyu-e2e/shenyu-e2e-client/src/main/java/org/apache/shenyu/e2e/client/admin/model/data/ResourceData.java
+++ b/shenyu-e2e/shenyu-e2e-client/src/main/java/org/apache/shenyu/e2e/client/admin/model/data/ResourceData.java
@@ -24,6 +24,9 @@ import org.apache.shenyu.e2e.common.IdManagers.Selectors;
 
 import java.io.IOException;
 
+/**
+ * Resource data.
+ */
 public interface ResourceData {
     
     String getId();
@@ -31,8 +34,7 @@ public interface ResourceData {
     String getName();
     
     void setName(String name);
-    
-    
+
     class IntToStringSerializer extends JsonSerializer<String> {
         
         @Override
diff --git a/shenyu-e2e/shenyu-e2e-client/src/main/java/org/apache/shenyu/e2e/client/admin/model/data/RuleData.java b/shenyu-e2e/shenyu-e2e-client/src/main/java/org/apache/shenyu/e2e/client/admin/model/data/RuleData.java
index 5bbdfcecb..ec92389ab 100644
--- a/shenyu-e2e/shenyu-e2e-client/src/main/java/org/apache/shenyu/e2e/client/admin/model/data/RuleData.java
+++ b/shenyu-e2e/shenyu-e2e-client/src/main/java/org/apache/shenyu/e2e/client/admin/model/data/RuleData.java
@@ -19,16 +19,15 @@ package org.apache.shenyu.e2e.client.admin.model.data;
 
 import com.fasterxml.jackson.annotation.JsonProperty;
 import com.fasterxml.jackson.databind.annotation.JsonSerialize;
-import lombok.Builder;
-import lombok.Data;
 import org.apache.shenyu.e2e.client.admin.model.MatchMode;
 import org.apache.shenyu.e2e.client.admin.model.handle.RuleHandle;
 import org.apache.shenyu.e2e.client.admin.model.handle.RuleHandle.Serializer;
 
 import java.util.List;
 
-@Data
-@Builder(toBuilder = true)
+/**
+ * Rule data.
+ */
 public class RuleData implements ResourceData {
     
     private String id;
@@ -46,11 +45,379 @@ public class RuleData implements ResourceData {
     
     @JsonSerialize(using = Serializer.class)
     private RuleHandle handle;
-    
+
+    /**
+     * List of ruleConditions.
+     */
     @JsonProperty("ruleConditions")
     private List<Condition> conditionList;
     
     private boolean enabled;
     
     private Boolean matchRestful;
+
+    /**
+     * builder constructor.
+     *
+     * @param builder builder
+     */
+    private RuleData(final RuleDataBuilder builder) {
+        this.id = builder.id;
+        this.name = builder.name;
+        this.selectorId = builder.selectorId;
+        this.logged = builder.logged;
+        this.matchMode = builder.matchMode;
+        this.sort = builder.sort;
+        this.handle = builder.handle;
+        this.conditionList = builder.conditionList;
+        this.enabled = builder.enabled;
+        this.matchRestful = builder.matchRestful;
+    }
+
+    /**
+     * class builder.
+     *
+     * @return Builder
+     */
+    public static RuleDataBuilder builder() {
+        return new RuleDataBuilder();
+    }
+
+    /**
+     * set id.
+     *
+     * @param id id
+     */
+    public void setId(String id) {
+        this.id = id;
+    }
+
+    /**
+     * get id.
+     *
+     * @return id
+     */
+    @Override
+    public String getId() {
+        return id;
+    }
+
+    /**
+     * set name.
+     *
+     * @param name name
+     */
+    @Override
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    /**
+     * get name.
+     *
+     * @return name
+     */
+    @Override
+    public String getName() {
+        return name;
+    }
+
+    /**
+     * set selectorId.
+     *
+     * @param selectorId selectorId
+     */
+    public void setSelectorId(String selectorId) {
+        this.selectorId = selectorId;
+    }
+
+    /**
+     * get selectorId.
+     *
+     * @return selectorId
+     */
+    public String getSelectorId() {
+        return selectorId;
+    }
+
+    /**
+     * is logged.
+     *
+     * @return logged
+     */
+    public boolean isLogged() {
+        return logged;
+    }
+
+    /**
+     * set logged.
+     *
+     * @param logged logged
+     */
+    public void setLogged(boolean logged) {
+        this.logged = logged;
+    }
+
+    /**
+     * set matchMode.
+     *
+     * @param matchMode matchMode
+     */
+    public void setMatchMode(MatchMode matchMode) {
+        this.matchMode = matchMode;
+    }
+
+    /**
+     * get matchMode.
+     *
+     * @return matchMode
+     */
+    public MatchMode getMatchMode() {
+        return matchMode;
+    }
+
+    /**
+     * set sort.
+     *
+     * @param sort sort
+     */
+    public void setSort(int sort) {
+        this.sort = sort;
+    }
+
+    /**
+     * get sort.
+     *
+     * @return sort
+     */
+    public int getSort() {
+        return sort;
+    }
+
+    /**
+     * set handle.
+     *
+     * @param handle handle
+     */
+    public void setHandle(RuleHandle handle) {
+        this.handle = handle;
+    }
+
+    /**
+     * get handle.
+     *
+     * @return handle
+     */
+    public RuleHandle getHandle() {
+        return handle;
+    }
+
+    /**
+     * set conditionList.
+     *
+     * @param conditionList conditionList
+     */
+    public void conditionList(List<Condition> conditionList) {
+        this.conditionList = conditionList;
+    }
+
+    /**
+     * get conditionList.
+     *
+     * @return conditionList
+     */
+    public List<Condition> getConditionList() {
+        return conditionList;
+    }
+
+    /**
+     * set enabled.
+     *
+     * @param enabled enabled
+     */
+    public void setEnabled(boolean enabled) {
+        this.enabled = enabled;
+    }
+
+    /**
+     * is enabled.
+     *
+     * @return enabled
+     */
+    public boolean isEnabled() {
+        return enabled;
+    }
+
+    /**
+     * set matchRestful.
+     *
+     * @param matchRestful matchRestful
+     */
+    public void setMatchRestful(Boolean matchRestful) {
+        this.matchRestful = matchRestful;
+    }
+
+    /**
+     * get matchRestful.
+     *
+     * @return matchRestful
+     */
+    public Boolean getMatchRestful() {
+        return matchRestful;
+    }
+
+    /**
+     * class builder.
+     */
+    public static final class RuleDataBuilder {
+
+        private String id;
+
+        private String name;
+
+        private String selectorId;
+
+        @JsonProperty("loged")
+        private boolean logged;
+
+        private MatchMode matchMode;
+
+        private int sort;
+
+        @JsonSerialize(using = Serializer.class)
+        private RuleHandle handle;
+
+        @JsonProperty("ruleConditions")
+        private List<Condition> conditionList;
+
+        private boolean enabled;
+
+        private Boolean matchRestful;
+
+        /**
+         * no args constructor.
+         */
+        private RuleDataBuilder() {
+
+        }
+
+        /**
+         * build new Object.
+         *
+         * @return RuleData
+         */
+        public RuleData build() {
+            return new RuleData(this);
+        }
+
+        /**
+         * build id.
+         *
+         * @param id id
+         * @return this
+         */
+        public RuleDataBuilder id(final String id) {
+            this.id = id;
+            return this;
+        }
+
+        /**
+         * build name.
+         *
+         * @param name name
+         * @return this
+         */
+        public RuleDataBuilder name(final String name) {
+            this.name = name;
+            return this;
+        }
+
+        /**
+         * build selectorId.
+         *
+         * @param selectorId selectorId
+         * @return this
+         */
+        public RuleDataBuilder selectorId(final String selectorId) {
+            this.selectorId = selectorId;
+            return this;
+        }
+
+        /**
+         * build logged.
+         *
+         * @param logged logged
+         * @return this
+         */
+        public RuleDataBuilder logged(final boolean logged) {
+            this.logged = logged;
+            return this;
+        }
+
+        /**
+         * build matchMode.
+         *
+         * @param matchMode matchMode
+         * @return this
+         */
+        public RuleDataBuilder matchMode(final MatchMode matchMode) {
+            this.matchMode = matchMode;
+            return this;
+        }
+
+        /**
+         * build sort.
+         *
+         * @param sort sort
+         * @return this
+         */
+        public RuleDataBuilder sort(final int sort) {
+            this.sort = sort;
+            return this;
+        }
+
+        /**
+         * build handle.
+         *
+         * @param handle handle
+         * @return this
+         */
+        public RuleDataBuilder handle(final RuleHandle handle) {
+            this.handle = handle;
+            return this;
+        }
+
+        /**
+         * build conditionList.
+         *
+         * @param conditionList conditionList
+         * @return this
+         */
+        public RuleDataBuilder conditionList(final List<Condition> conditionList) {
+            this.conditionList = conditionList;
+            return this;
+        }
+
+        /**
+         * build enabled.
+         *
+         * @param enabled enabled
+         * @return this
+         */
+        public RuleDataBuilder enabled(final boolean enabled) {
+            this.enabled = enabled;
+            return this;
+        }
+
+        /**
+         * build matchRestful.
+         *
+         * @param matchRestful matchRestful
+         * @return this
+         */
+        public RuleDataBuilder matchRestful(final Boolean matchRestful) {
+            this.matchRestful = matchRestful;
+            return this;
+        }
+    }
 }
diff --git a/shenyu-e2e/shenyu-e2e-client/src/main/java/org/apache/shenyu/e2e/client/admin/model/data/RuleQueryCondition.java b/shenyu-e2e/shenyu-e2e-client/src/main/java/org/apache/shenyu/e2e/client/admin/model/data/RuleQueryCondition.java
new file mode 100644
index 000000000..b6a5eb2be
--- /dev/null
+++ b/shenyu-e2e/shenyu-e2e-client/src/main/java/org/apache/shenyu/e2e/client/admin/model/data/RuleQueryCondition.java
@@ -0,0 +1,216 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.shenyu.e2e.client.admin.model.data;
+
+import com.fasterxml.jackson.annotation.JsonInclude;
+
+import java.util.Arrays;
+
+@JsonInclude(JsonInclude.Include.NON_NULL)
+public class RuleQueryCondition implements QueryCondition {
+
+    private String excluded;
+
+    private String keyword;
+
+    private String[] selectors;
+
+    private boolean switchStatus;
+
+    /**
+     * builder constructor.
+     *
+     * @param builder builder
+     */
+    private RuleQueryCondition (Builder builder) {
+        this.excluded = builder.excluded;
+        this.keyword = builder.keyword;
+        this.selectors = builder.selectors;
+        this.switchStatus = builder.switchStatus;
+    }
+    /**
+     * class builder.
+     *
+     * @return Builder
+     */
+    public static Builder builder() {
+        return new Builder();
+    }
+
+    /**
+     * get excluded.
+     *
+     * @return excluded
+     */
+    public String getExcluded() {
+        return excluded;
+    }
+
+    /**
+     * set excluded.
+     *
+     * @param excluded excluded
+     */
+    public void setExcluded(String excluded) {
+        this.excluded = excluded;
+    }
+
+    /**
+     * get keyword.
+     *
+     * @return keyword
+     */
+    public String getKeyword() {
+        return keyword;
+    }
+
+    /**
+     * set keyword.
+     *
+     * @param keyword keyword
+     */
+    public void setKeyword(String keyword) {
+        this.keyword = keyword;
+    }
+
+    /**
+     * get selectors.
+     *
+     * @return selectors
+     */
+    public String[] getSelectors() {
+        return selectors;
+    }
+
+    /**
+     * set selectors.
+     *
+     * @param selectors selectors
+     */
+    public void setSelectors(String[] selectors) {
+        this.selectors = selectors;
+    }
+
+    /**
+     * is switchStatus.
+     *
+     * @return switchStatus
+     */
+    public boolean isSwitchStatus() {
+        return switchStatus;
+    }
+
+    /**
+     * set switchStatus.
+     *
+     * @param switchStatus switchStatus
+     */
+    public void setSwitchStatus(boolean switchStatus) {
+        this.switchStatus = switchStatus;
+    }
+
+    @Override
+    public String toString() {
+        return "RuleQueryCondition{"
+                + "excluded='"
+                + excluded
+                + '\''
+                + ", keyword='"
+                + keyword
+                + '\''
+                + ", selectors="
+                + Arrays.toString(selectors)
+                + ", switchStatus="
+                + switchStatus
+                + '}';
+    }
+
+    /**
+     * class builder.
+     */
+    public static final class Builder {
+
+        private String excluded;
+
+        private String keyword;
+
+        private String[] selectors;
+
+        private boolean switchStatus;
+
+        /**
+         * no args constructor.
+         */
+        private Builder() {
+
+        }
+
+        /**
+         * build new Object.
+         *
+         * @return RuleQueryCondition
+         */
+        public RuleQueryCondition build() {
+            return new RuleQueryCondition(this);
+        }
+
+        /**
+         * build excluded.
+         *
+         * @param excluded excluded
+         * @return this
+         */
+        public Builder excluded(String excluded) {
+            this.excluded = excluded;
+            return this;
+        }
+
+        /**
+         * build keyword.
+         *
+         * @param keyword keyword
+         * @return this
+         */
+        public Builder keyword(String keyword) {
+            this.keyword = keyword;
+            return this;
+        }
+
+        /**
+         * build selectors.
+         *
+         * @param selectors selectors
+         * @return this
+         */
+        public Builder selectors(String[] selectors) {
+            this.selectors = selectors;
+            return this;
+        }
+
+        /**
+         * build switchStatus.
+         *
+         * @param switchStatus switchStatus
+         * @return this
+         */
+        public Builder switchStatus(boolean switchStatus) {
+            this.switchStatus = switchStatus;
+            return this;
+        }
+    }
+}
diff --git a/shenyu-e2e/shenyu-e2e-client/src/main/java/org/apache/shenyu/e2e/client/admin/model/data/SearchCondition.java b/shenyu-e2e/shenyu-e2e-client/src/main/java/org/apache/shenyu/e2e/client/admin/model/data/SearchCondition.java
index dfbe4d2c1..b83434a1e 100644
--- a/shenyu-e2e/shenyu-e2e-client/src/main/java/org/apache/shenyu/e2e/client/admin/model/data/SearchCondition.java
+++ b/shenyu-e2e/shenyu-e2e-client/src/main/java/org/apache/shenyu/e2e/client/admin/model/data/SearchCondition.java
@@ -17,54 +17,15 @@
 
 package org.apache.shenyu.e2e.client.admin.model.data;
 
-import com.fasterxml.jackson.annotation.JsonAlias;
 import com.fasterxml.jackson.annotation.JsonInclude;
 import com.fasterxml.jackson.annotation.JsonInclude.Include;
-import lombok.Builder;
-import lombok.Getter;
-import lombok.ToString;
 
-@Getter
-@Builder
-@ToString
+/**
+ * The condition of searching.
+ */
 @JsonInclude(Include.NON_NULL)
 public class SearchCondition {
-    
-    public interface QueryCondition {
-        String getExcluded();
-        
-        String getKeyword();
-        
-        boolean isSwitchStatus();
-    }
-    
-    @Getter
-    @Builder
-    @ToString
-    @JsonInclude(Include.NON_NULL)
-    public static class SelectorQueryCondition implements QueryCondition {
-        private String excluded;
-        private String keyword;
-        
-        @JsonAlias("plugin")
-        private String[] plugins;
-        
-        private boolean switchStatus;
-    }
-    
-    @Getter
-    @Builder
-    @ToString
-    @JsonInclude(Include.NON_NULL)
-    public static class RuleQueryCondition implements QueryCondition {
-        private String excluded;
-        private String keyword;
-        
-        private String[] selectors;
-        
-        private boolean switchStatus;
-    }
-    
+
     public static QueryCondition QUERY_ALL = new QueryCondition() {
     
         @Override
@@ -88,5 +49,150 @@ public class SearchCondition {
     private int pageSize;
     
     private QueryCondition condition;
-    
+
+    /**
+     * class builder.
+     *
+     * @return Builder
+     */
+    public static Builder builder() {
+        return new Builder();
+    }
+
+    /**
+     * builder constructor.
+     *
+     * @param builder builder
+     */
+    private SearchCondition(Builder builder) {
+        this.pageNum = builder.pageNum;
+        this.pageSize = builder.pageSize;
+        this.condition = builder.condition;
+    }
+
+    /**
+     * get pageNum.
+     *
+     * @return pageNum
+     */
+    public int getPageNum() {
+        return pageNum;
+    }
+
+    /**
+     * set pageNum.
+     *
+     * @param pageNum pageNum
+     */
+    public void setPageNum(int pageNum) {
+        this.pageNum = pageNum;
+    }
+
+    /**
+     * get pageSize.
+     *
+     * @return pageSize
+     */
+    public int getPageSize() {
+        return pageSize;
+    }
+
+    /**
+     * set pageSize.
+     *
+     * @param pageSize pageSize
+     */
+    public void setPageSize(int pageSize) {
+        this.pageSize = pageSize;
+    }
+
+    /**
+     * get condition.
+     *
+     * @return condition
+     */
+    public QueryCondition getCondition() {
+        return condition;
+    }
+
+    /**
+     * set condition.
+     *
+     * @param condition condition
+     */
+    public void setCondition(QueryCondition condition) {
+        this.condition = condition;
+    }
+
+    @Override
+    public String toString() {
+        return "SearchCondition{"
+                + "pageNum="
+                + pageNum
+                + ", pageSize="
+                + pageSize
+                + ", condition="
+                + condition
+                + '}';
+    }
+
+    /**
+     * class builder.
+     */
+    public static final class Builder {
+
+        private int pageNum;
+
+        private int pageSize;
+
+        private QueryCondition condition;
+
+        /**
+         * no args constructor.
+         */
+        private Builder() {
+        }
+
+        /**
+         * build new Object.
+         *
+         * @return SearchCondition
+         */
+        public SearchCondition build() {
+            return new SearchCondition(this);
+        }
+
+        /**
+         * build pageNum.
+         *
+         * @param pageNum pageNum
+         * @return this
+         */
+        public Builder pageNum(int pageNum) {
+            this.pageNum = pageNum;
+            return this;
+        }
+
+        /**
+         * build pageSize.
+         *
+         * @param pageSize pageSize
+         * @return this
+         */
+        public Builder pageSize(int pageSize) {
+            this.pageSize = pageSize;
+            return this;
+        }
+
+        /**
+         * build condition.
+         *
+         * @param condition condition
+         * @return this
+         */
+        public Builder condition(QueryCondition condition) {
+            this.condition = condition;
+            return this;
+        }
+    }
 }
diff --git a/shenyu-e2e/shenyu-e2e-client/src/main/java/org/apache/shenyu/e2e/client/admin/model/data/SelectorData.java b/shenyu-e2e/shenyu-e2e-client/src/main/java/org/apache/shenyu/e2e/client/admin/model/data/SelectorData.java
index a38e1edef..40d40fcd4 100644
--- a/shenyu-e2e/shenyu-e2e-client/src/main/java/org/apache/shenyu/e2e/client/admin/model/data/SelectorData.java
+++ b/shenyu-e2e/shenyu-e2e-client/src/main/java/org/apache/shenyu/e2e/client/admin/model/data/SelectorData.java
@@ -24,8 +24,6 @@ import com.fasterxml.jackson.databind.ObjectMapper;
 import com.fasterxml.jackson.databind.SerializerProvider;
 import com.fasterxml.jackson.databind.annotation.JsonSerialize;
 import com.google.common.base.Strings;
-import lombok.Builder;
-import lombok.Data;
 import org.apache.shenyu.e2e.client.admin.model.MatchMode;
 import org.apache.shenyu.e2e.client.admin.model.Plugin;
 import org.apache.shenyu.e2e.client.admin.model.SelectorType;
@@ -34,8 +32,9 @@ import org.apache.shenyu.e2e.client.admin.model.handle.PluginHandle;
 import java.io.IOException;
 import java.util.List;
 
-@Data
-@Builder(toBuilder = true)
+/**
+ * selector data.
+ */
 public class SelectorData implements ResourceData {
     
     private String id;
@@ -65,6 +64,255 @@ public class SelectorData implements ResourceData {
     private int sort;
     
     private boolean matchRestful;
+
+    /**
+     * builder constructor.
+     *
+     * @param builder builder
+     */
+    private SelectorData(final SelectorDataBuilder builder) {
+        this.id = builder.id;
+        this.name = builder.name;
+        this.plugin = builder.plugin;
+        this.type = builder.type;
+        this.matchMode = builder.matchMode;
+        this.enabled = builder.enabled;
+        this.logged = builder.logged;
+        this.continued = builder.continued;
+        this.handle = builder.handle;
+        this.conditionList = builder.conditionList;
+        this.sort = builder.sort;
+        this.matchRestful = builder.matchRestful;
+    }
+
+    /**
+     * class builder.
+     *
+     * @return Builder
+     */
+    public static SelectorDataBuilder builder() {
+        return new SelectorDataBuilder();
+    }
+
+    /**
+     * get id.
+     *
+     * @return id
+     */
+    @Override
+    public String getId() {
+        return id;
+    }
+
+    /**
+     * set id.
+     *
+     * @param id id
+     */
+    public void setId(String id) {
+        this.id = id;
+    }
+
+    /**
+     * get name.
+     *
+     * @return name
+     */
+    @Override
+    public String getName() {
+        return name;
+    }
+
+    /**
+     * set name.
+     *
+     * @param name name
+     */
+    @Override
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    /**
+     * get plugin.
+     *
+     * @return plugin
+     */
+    public Plugin getPlugin() {
+        return plugin;
+    }
+
+    /**
+     * set plugin.
+     *
+     * @param plugin plugin
+     */
+    public void plugin(Plugin plugin) {
+        this.plugin = plugin;
+    }
+
+    /**
+     * get type.
+     *
+     * @return type
+     */
+    public SelectorType getType() {
+        return type;
+    }
+
+    /**
+     * set type.
+     *
+     * @param type type
+     */
+    public void setType(SelectorType type) {
+        this.type = type;
+    }
+
+    /**
+     * get matchMode.
+     *
+     * @return matchMode
+     */
+    public MatchMode getMatchMode() {
+        return matchMode;
+    }
+
+    /**
+     * set matchMode.
+     *
+     * @param matchMode matchMode
+     */
+    public void setMatchMode(MatchMode matchMode) {
+        this.matchMode = matchMode;
+    }
+
+    /**
+     * is enabled.
+     *
+     * @return enabled
+     */
+    public boolean isEnabled() {
+        return enabled;
+    }
+
+    /**
+     * set enabled.
+     *
+     * @param enabled enabled
+     */
+    public void setEnabled(boolean enabled) {
+        this.enabled = enabled;
+    }
+
+    /**
+     * is logged.
+     *
+     * @return logged
+     */
+    public boolean isLogged() {
+        return logged;
+    }
+
+    /**
+     * set logged.
+     *
+     * @param logged logged
+     */
+    public void setLogged(boolean logged) {
+        this.logged = logged;
+    }
+
+    /**
+     * is continued.
+     *
+     * @return continued
+     */
+    public boolean isContinued() {
+        return continued;
+    }
+
+    /**
+     * set continued.
+     *
+     * @param continued continued
+     */
+    public void setContinued(boolean continued) {
+        this.continued = continued;
+    }
+
+    /**
+     * get handle.
+     *
+     * @return handle
+     */
+    public PluginHandle getHandle() {
+        return handle;
+    }
+
+    /**
+     * set handle.
+     *
+     * @param handle handle
+     */
+    public void handle(PluginHandle handle) {
+        this.handle = handle;
+    }
+
+    /**
+     * get conditionList.
+     *
+     * @return conditionList
+     */
+    public List<Condition> getConditionList() {
+        return conditionList;
+    }
+
+    /**
+     * set conditionList.
+     *
+     * @param conditionList conditionList
+     */
+    public void conditionList(List<Condition> conditionList) {
+        this.conditionList = conditionList;
+    }
+
+    /**
+     * get sort.
+     *
+     * @return sort
+     */
+    public int getSort() {
+        return sort;
+    }
+
+    /**
+     * set sort.
+     *
+     * @param sort sort
+     */
+    public void setSort(int sort) {
+        this.sort = sort;
+    }
+
+    /**
+     * is matchRestful.
+     *
+     * @return matchRestful
+     */
+    public boolean isMatchRestful() {
+        return matchRestful;
+    }
+
+    /**
+     * set matchRestful.
+     *
+     * @param matchRestful matchRestful
+     */
+    public void setMatchRestful(boolean matchRestful) {
+        this.matchRestful = matchRestful;
+    }
+
     static class PluginHandleSerializer extends JsonSerializer<PluginHandle> {
         private static final ObjectMapper mapper = new ObjectMapper();
         
@@ -74,5 +322,186 @@ public class SelectorData implements ResourceData {
             jsonGenerator.writeString(Strings.nullToEmpty(content));
         }
     }
-    
+
+    /**
+     * class builder.
+     */
+    public static final class SelectorDataBuilder {
+
+        private String id;
+
+        private String name;
+
+        @JsonProperty("pluginId")
+        private Plugin plugin;
+
+        private SelectorType type;
+
+        private MatchMode matchMode;
+
+        private boolean enabled;
+
+        @JsonProperty(value = "loged")
+        private boolean logged;
+
+        private boolean continued;
+
+        @JsonSerialize(using = PluginHandleSerializer.class)
+        private PluginHandle handle;
+
+        @JsonProperty("selectorConditions")
+        private List<Condition> conditionList;
+
+        private int sort;
+
+        private boolean matchRestful;
+
+        /**
+         * no args constructor.
+         */
+        private SelectorDataBuilder() {
+
+        }
+
+        /**
+         * build new Object.
+         *
+         * @return SelectorData
+         */
+        public SelectorData build() {
+            return new SelectorData(this);
+        }
+
+        /**
+         * build id.
+         *
+         * @param id id
+         * @return this
+         */
+        public SelectorDataBuilder id(String id) {
+            this.id = id;
+            return this;
+        }
+
+        /**
+         * build name.
+         *
+         * @param name name
+         * @return this
+         */
+        public SelectorDataBuilder name(String name) {
+            this.name = name;
+            return this;
+        }
+
+        /**
+         * build plugin.
+         *
+         * @param plugin plugin
+         * @return this
+         */
+        public SelectorDataBuilder plugin(Plugin plugin) {
+            this.plugin = plugin;
+            return this;
+        }
+
+        /**
+         * build type.
+         *
+         * @param type type
+         * @return this
+         */
+        public SelectorDataBuilder type(SelectorType type) {
+            this.type = type;
+            return this;
+        }
+
+        /**
+         * build matchMode.
+         *
+         * @param matchMode matchMode
+         * @return this
+         */
+        public SelectorDataBuilder matchMode(MatchMode matchMode) {
+            this.matchMode = matchMode;
+            return this;
+        }
+
+        /**
+         * build enabled.
+         *
+         * @param enabled enabled
+         * @return this
+         */
+        public SelectorDataBuilder enabled(boolean enabled) {
+            this.enabled = enabled;
+            return this;
+        }
+
+        /**
+         * build logged.
+         *
+         * @param logged logged
+         * @return this
+         */
+        public SelectorDataBuilder logged(boolean logged) {
+            this.logged = logged;
+            return this;
+        }
+
+        /**
+         * build continued.
+         *
+         * @param continued continued
+         * @return this
+         */
+        public SelectorDataBuilder continued(boolean continued) {
+            this.continued = continued;
+            return this;
+        }
+
+        /**
+         * build handle.
+         *
+         * @param handle handle
+         * @return this
+         */
+        public SelectorDataBuilder handle(PluginHandle handle) {
+            this.handle = handle;
+            return this;
+        }
+
+        /**
+         * build conditionList.
+         *
+         * @param conditionList conditionList
+         * @return this
+         */
+        public SelectorDataBuilder conditionList(List<Condition> conditionList) {
+            this.conditionList = conditionList;
+            return this;
+        }
+
+        /**
+         * build sort.
+         *
+         * @param sort sort
+         * @return this
+         */
+        public SelectorDataBuilder sort(int sort) {
+            this.sort = sort;
+            return this;
+        }
+
+        /**
+         * build matchRestful.
+         *
+         * @param matchRestful matchRestful
+         * @return this
+         */
+        public SelectorDataBuilder matchRestful(boolean matchRestful) {
+            this.matchRestful = matchRestful;
+            return this;
+        }
+    }
 }
diff --git a/shenyu-e2e/shenyu-e2e-client/src/main/java/org/apache/shenyu/e2e/client/admin/model/data/SelectorQueryCondition.java b/shenyu-e2e/shenyu-e2e-client/src/main/java/org/apache/shenyu/e2e/client/admin/model/data/SelectorQueryCondition.java
new file mode 100644
index 000000000..3d66de57b
--- /dev/null
+++ b/shenyu-e2e/shenyu-e2e-client/src/main/java/org/apache/shenyu/e2e/client/admin/model/data/SelectorQueryCondition.java
@@ -0,0 +1,226 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.shenyu.e2e.client.admin.model.data;
+
+import com.fasterxml.jackson.annotation.JsonAlias;
+import com.fasterxml.jackson.annotation.JsonInclude;
+
+import java.util.Arrays;
+
+/**
+ * Selector query condition.
+ */
+@JsonInclude(JsonInclude.Include.NON_NULL)
+public class SelectorQueryCondition implements QueryCondition {
+
+    private String excluded;
+
+    private String keyword;
+
+    @JsonAlias("plugin")
+    private String[] plugins;
+
+    private boolean switchStatus;
+
+    /**
+     * builder constructor.
+     *
+     * @param builder builder
+     */
+    private SelectorQueryCondition(Builder builder) {
+        this.excluded = builder.excluded;
+        this.keyword = builder.keyword;
+        this.plugins = builder.plugins;
+        this.switchStatus  = builder.switchStatus;
+    }
+
+    /**
+     * class builder.
+     *
+     * @return Builder
+     */
+    public static Builder builder() {
+        return new Builder();
+    }
+
+    /**
+     * get excluded.
+     *
+     * @return excluded
+     */
+    @Override
+    public String getExcluded() {
+        return excluded;
+    }
+
+    /**
+     * set excluded.
+     *
+     * @param excluded excluded
+     */
+    public void setExcluded(String excluded) {
+        this.excluded = excluded;
+    }
+
+    /**
+     * get keyword.
+     *
+     * @return keyword
+     */
+    @Override
+    public String getKeyword() {
+        return keyword;
+    }
+
+    /**
+     * set keyword.
+     *
+     * @param keyword keyword
+     */
+    public void setKeyword(String keyword) {
+        this.keyword = keyword;
+    }
+
+    /**
+     * get plugins.
+     *
+     * @return plugins
+     */
+    public String[] getPlugins() {
+        return plugins;
+    }
+
+    /**
+     * set plugins.
+     *
+     * @param plugins plugins
+     */
+    public void setPlugins(String[] plugins) {
+        this.plugins = plugins;
+    }
+
+    /**
+     * is switchStatus.
+     *
+     * @return switchStatus
+     */
+    @Override
+    public boolean isSwitchStatus() {
+        return switchStatus;
+    }
+
+    /**
+     * get switchStatus.
+     *
+     * @param switchStatus switchStatus
+     */
+    public void setSwitchStatus(boolean switchStatus) {
+        this.switchStatus = switchStatus;
+    }
+
+    @Override
+    public String toString() {
+        return "SelectorQueryCondition{"
+                + "excluded='"
+                + excluded
+                + '\''
+                + ", keyword='"
+                + keyword
+                + '\''
+                + ", plugins="
+                + Arrays.toString(plugins)
+                + ", switchStatus="
+                + switchStatus
+                + '}';
+    }
+
+    /**
+     * class builder.
+     */
+    public static final class Builder {
+
+        private String excluded;
+
+        private String keyword;
+
+        @JsonAlias("plugin")
+        private String[] plugins;
+
+        private boolean switchStatus;
+
+        /**
+         * no args constructor.
+         */
+        private Builder() {
+
+        }
+
+        /**
+         * build new Object.
+         *
+         * @return SelectorQueryCondition
+         */
+        public SelectorQueryCondition build() {
+            return new SelectorQueryCondition(this);
+        }
+
+        /**
+         * build excluded.
+         *
+         * @param excluded excluded
+         * @return this
+         */
+        public Builder excluded(String excluded) {
+            this.excluded = excluded;
+            return this;
+        }
+
+        /**
+         * build keyword.
+         *
+         * @param keyword keyword
+         * @return this
+         */
+        public Builder keyword(String keyword) {
+            this.keyword = keyword;
+            return this;
+        }
+
+        /**
+         * build plugins.
+         *
+         * @param plugins plugins
+         * @return this
+         */
+        public Builder plugins(String[] plugins) {
+            this.plugins = plugins;
+            return this;
+        }
+
+        /**
+         * build switchStatus.
+         *
+         * @param switchStatus switchStatus
+         * @return this
+         */
+        public Builder switchStatus(boolean switchStatus) {
+            this.switchStatus = switchStatus;
+            return this;
+        }
+    }
+}
diff --git a/shenyu-e2e/shenyu-e2e-client/src/main/java/org/apache/shenyu/e2e/client/admin/model/handle/DivideRuleHandle.java b/shenyu-e2e/shenyu-e2e-client/src/main/java/org/apache/shenyu/e2e/client/admin/model/handle/DivideRuleHandle.java
index ab0a8c573..5bf263d9b 100644
--- a/shenyu-e2e/shenyu-e2e-client/src/main/java/org/apache/shenyu/e2e/client/admin/model/handle/DivideRuleHandle.java
+++ b/shenyu-e2e/shenyu-e2e-client/src/main/java/org/apache/shenyu/e2e/client/admin/model/handle/DivideRuleHandle.java
@@ -17,25 +17,21 @@
 
 package org.apache.shenyu.e2e.client.admin.model.handle;
 
-import com.fasterxml.jackson.core.JsonProcessingException;
 import com.fasterxml.jackson.databind.JavaType;
-import com.fasterxml.jackson.databind.ObjectMapper;
 import com.fasterxml.jackson.databind.annotation.JsonSerialize;
 import com.fasterxml.jackson.databind.type.ReferenceType;
 import com.fasterxml.jackson.databind.type.SimpleType;
 import com.fasterxml.jackson.databind.type.TypeFactory;
 import com.fasterxml.jackson.databind.util.Converter;
-import lombok.Builder;
-import lombok.Data;
-import org.apache.shenyu.e2e.client.admin.model.data.RuleData;
 
-@Data
-@Builder(toBuilder = true)
+/**
+ * Divide rule handle.
+ */
 public class DivideRuleHandle implements RuleHandle {
     
-    private String loadBalance; // todo enhancement, change to enum
+    private String loadBalance;
     
-    private String retryStrategy; // todo enhancement, change to enum
+    private String retryStrategy;
     
     @JsonSerialize(converter = IntConverter.class)
     private int retry;
@@ -54,7 +50,7 @@ public class DivideRuleHandle implements RuleHandle {
         public String convert(Integer integer) {
             return String.valueOf(integer);
         }
-        
+
         @Override
         public JavaType getInputType(TypeFactory typeFactory) {
             return _IN;
@@ -65,5 +61,236 @@ public class DivideRuleHandle implements RuleHandle {
             return _OUT;
         }
     }
-    
+
+    /**
+     * builder constructor.
+     *
+     * @param builder builder
+     */
+    private DivideRuleHandle(Builder builder) {
+        this.loadBalance = builder.loadBalance;
+        this.retryStrategy = builder.retryStrategy;
+        this.retry = builder.retry;
+        this.timeout = builder.timeout;
+        this.headerMaxSize = builder.headerMaxSize;
+        this.requestMaxSize = builder.requestMaxSize;
+    }
+
+    /**
+     * class builder.
+     *
+     * @return Builder
+     */
+    public static Builder builder() {
+        return new Builder();
+    }
+
+    /**
+     * get loadBalance.
+     *
+     * @return loadBalance
+     */
+    public String getLoadBalance() {
+        return loadBalance;
+    }
+
+    /**
+     * set loadBalance.
+     *
+     * @param loadBalance loadBalance
+     */
+    public void setLoadBalance(String loadBalance) {
+        this.loadBalance = loadBalance;
+    }
+
+    /**
+     * get retryStrategy.
+     *
+     * @return retryStrategy
+     */
+    public String getRetryStrategy() {
+        return retryStrategy;
+    }
+
+    /**
+     * set retryStrategy.
+     *
+     * @param retryStrategy retryStrategy
+     */
+    public void setRetryStrategy(String retryStrategy) {
+        this.retryStrategy = retryStrategy;
+    }
+
+    /**
+     * get retry.
+     *
+     * @return retry
+     */
+    public int getRetry() {
+        return retry;
+    }
+
+    /**
+     * set retry.
+     *
+     * @param retry retry
+     */
+    public void setRetry(int retry) {
+        this.retry = retry;
+    }
+
+    /**
+     * get timeout.
+     *
+     * @return timeout
+     */
+    public long getTimeout() {
+        return timeout;
+    }
+
+    /**
+     * set timeout.
+     *
+     * @param timeout timeout
+     */
+    public void setTimeout(long timeout) {
+        this.timeout = timeout;
+    }
+
+    /**
+     * get headerMaxSize.
+     *
+     * @return headerMaxSize
+     */
+    public long getHeaderMaxSize() {
+        return headerMaxSize;
+    }
+
+    /**
+     * set headerMaxSize.
+     *
+     * @param headerMaxSize
+     */
+    public void setHeaderMaxSize(long headerMaxSize) {
+        this.headerMaxSize = headerMaxSize;
+    }
+
+    /**
+     * get requestMaxSize.
+     *
+     * @return requestMaxSize
+     */
+    public long getRequestMaxSize() {
+        return requestMaxSize;
+    }
+
+    /**
+     * set requestMaxSize.
+     *
+     * @param requestMaxSize requestMaxSize
+     */
+    public void setRequestMaxSize(long requestMaxSize) {
+        this.requestMaxSize = requestMaxSize;
+    }
+
+    /**
+     * class builder.
+     */
+    public static final class Builder {
+
+        private String loadBalance;
+
+        private String retryStrategy;
+
+        @JsonSerialize(converter = IntConverter.class)
+        private int retry;
+
+        private long timeout;
+
+        private long headerMaxSize;
+
+        private long requestMaxSize;
+
+        /**
+         * no args constructor.
+         */
+        private Builder() {
+
+        }
+
+        /**
+         * build new Object.
+         *
+         * @return DivideRuleHandle
+         */
+        public DivideRuleHandle build() {
+            return new DivideRuleHandle(this);
+        }
+
+        /**
+         * build loadBalance.
+         *
+         * @param loadBalance loadBalance
+         * @return this
+         */
+        public Builder loadBalance(String loadBalance) {
+            this.loadBalance = loadBalance;
+            return this;
+        }
+
+        /**
+         * build retryStrategy.
+         *
+         * @param retryStrategy retryStrategy
+         * @return this
+         */
+        public Builder retryStrategy(String retryStrategy) {
+            this.retryStrategy = retryStrategy;
+            return this;
+        }
+
+        /**
+         * build retry.
+         *
+         * @param retry retry
+         * @return this
+         */
+        public Builder retry(int retry) {
+            this.retry = retry;
+            return this;
+        }
+
+        /**
+         * build timeout.
+         *
+         * @param timeout timeout
+         * @return this
+         */
+        public Builder timeout(long timeout) {
+            this.timeout = timeout;
+            return this;
+        }
+
+        /**
+         * build headerMaxSize.
+         *
+         * @param headerMaxSize headerMaxSize
+         * @return this
+         */
+        public Builder headerMaxSize(long headerMaxSize) {
+            this.headerMaxSize = headerMaxSize;
+            return this;
+        }
+
+        /**
+         * build requestMaxSize.
+         *
+         * @param requestMaxSize requestMaxSize
+         * @return this
+         */
+        public Builder requestMaxSize(long requestMaxSize) {
+            this.requestMaxSize = requestMaxSize;
+            return this;
+        }
+    }
 }
diff --git a/shenyu-e2e/shenyu-e2e-client/src/main/java/org/apache/shenyu/e2e/client/admin/model/handle/Upstreams.java b/shenyu-e2e/shenyu-e2e-client/src/main/java/org/apache/shenyu/e2e/client/admin/model/handle/Upstreams.java
index 72fdcb86b..d695f0963 100644
--- a/shenyu-e2e/shenyu-e2e-client/src/main/java/org/apache/shenyu/e2e/client/admin/model/handle/Upstreams.java
+++ b/shenyu-e2e/shenyu-e2e-client/src/main/java/org/apache/shenyu/e2e/client/admin/model/handle/Upstreams.java
@@ -23,12 +23,14 @@ import com.fasterxml.jackson.databind.ObjectMapper;
 import com.fasterxml.jackson.databind.SerializerProvider;
 import com.fasterxml.jackson.databind.annotation.JsonSerialize;
 import com.google.common.collect.Lists;
-import lombok.Data;
 import org.apache.shenyu.e2e.client.admin.model.handle.Upstreams.Serializer;
 
 import java.io.IOException;
 import java.util.List;
 
+/**
+ * upstream list.
+ */
 @JsonSerialize(using = Serializer.class)
 public class Upstreams implements PluginHandle {
     
@@ -37,24 +39,116 @@ public class Upstreams implements PluginHandle {
     Upstreams(List<Upstream> upstreams) {
         this.upstreams = upstreams;
     }
-    
+
+    /**
+     * get upstreams.
+     *
+     * @return upstreams
+     */
     public List<Upstream> getUpstreams() {
         return this.upstreams;
     }
-    
+
+    /**
+     * class builder.
+     *
+     * @return Builder
+     */
     public static Builder builder() {
         return new Builder();
     }
-    
-    @Data
-    @lombok.Builder
+
+    /**
+     * class upstream.
+     */
     public static class Upstream {
+
         private String upstreamUrl;
+
+        /**
+         * builder constructor.
+         *
+         * @param builder builder
+         */
+        private Upstream(Builder builder) {
+            this.upstreamUrl = builder.upstreamUrl;
+        }
+
+        /**
+         * class builder.
+         *
+         * @return Builder
+         */
+        public static Builder builder() {
+            return new Builder();
+        }
+
+        /**
+         * get upstreamUrl.
+         *
+         * @return upstreamUrl
+         */
+        public String getUpstreamUrl() {
+            return upstreamUrl;
+        }
+
+        /**
+         * set upstreamUrl.
+         *
+         * @param upstreamUrl upstreamUrl
+         */
+        public void setUpstreamUrl(String upstreamUrl) {
+            this.upstreamUrl = upstreamUrl;
+        }
+
+        /**
+         * class builder.
+         */
+        public static final class Builder {
+
+            private String upstreamUrl;
+
+            /**
+             * no args constructor.
+             */
+            private Builder() {
+            }
+
+            /**
+             * build new Object.
+             *
+             * @return Upstream
+             */
+            public Upstream build() {
+                return new Upstream(this);
+            }
+
+            /**
+             * build upstreamUrl.
+             *
+             * @param upstreamUrl upstreamUrl
+             * @return this
+             */
+            public Builder upstreamUrl(String upstreamUrl) {
+                this.upstreamUrl = upstreamUrl;
+                return this;
+            }
+        }
     }
-    
+
+    /**
+     * class Builder.
+     */
     public static final class Builder {
+
         private List<Upstream> upstreams = Lists.newArrayList();
-        
+
+        /**
+         * add upstream.
+         *
+         * @param upstream
+         * @return this
+         */
         public Builder add(Upstream upstream) {
             upstreams.add(upstream);
             return this;
diff --git a/shenyu-e2e/shenyu-e2e-client/src/main/java/org/apache/shenyu/e2e/client/admin/model/response/FakeResourceDTO.java b/shenyu-e2e/shenyu-e2e-client/src/main/java/org/apache/shenyu/e2e/client/admin/model/response/FakeResourceDTO.java
index 7b267fdec..9d482d403 100644
--- a/shenyu-e2e/shenyu-e2e-client/src/main/java/org/apache/shenyu/e2e/client/admin/model/response/FakeResourceDTO.java
+++ b/shenyu-e2e/shenyu-e2e-client/src/main/java/org/apache/shenyu/e2e/client/admin/model/response/FakeResourceDTO.java
@@ -18,11 +18,12 @@
 package org.apache.shenyu.e2e.client.admin.model.response;
 
 import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
-import lombok.Data;
 
 import java.util.Date;
 
-@Data
+/**
+ * Fake resourceDTO.
+ */
 @JsonIgnoreProperties(ignoreUnknown = true)
 public class FakeResourceDTO implements ResourceDTO{
     
@@ -39,4 +40,42 @@ public class FakeResourceDTO implements ResourceDTO{
     public Date getDateUpdated() {
         return null;
     }
+
+    /**
+     * get id.
+     *
+     * @return id
+     */
+    @Override
+    public String getId() {
+        return id;
+    }
+
+    /**
+     * set id.
+     *
+     * @param id id
+     */
+    public void setId(String id) {
+        this.id = id;
+    }
+
+    /**
+     * get name.
+     *
+     * @return name
+     */
+    @Override
+    public String getName() {
+        return name;
+    }
+
+    /**
+     * set name.
+     *
+     * @param name name
+     */
+    public void setName(String name) {
+        this.name = name;
+    }
 }
diff --git a/shenyu-e2e/shenyu-e2e-client/src/main/java/org/apache/shenyu/e2e/client/admin/model/response/LoginInfo.java b/shenyu-e2e/shenyu-e2e-client/src/main/java/org/apache/shenyu/e2e/client/admin/model/response/LoginInfo.java
index 571809ad7..6b76c8896 100644
--- a/shenyu-e2e/shenyu-e2e-client/src/main/java/org/apache/shenyu/e2e/client/admin/model/response/LoginInfo.java
+++ b/shenyu-e2e/shenyu-e2e-client/src/main/java/org/apache/shenyu/e2e/client/admin/model/response/LoginInfo.java
@@ -19,9 +19,10 @@ package org.apache.shenyu.e2e.client.admin.model.response;
 
 import com.fasterxml.jackson.annotation.JsonAlias;
 import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
-import lombok.Data;
 
-@Data
+/**
+ * Login information.
+ */
 @JsonIgnoreProperties(ignoreUnknown = true)
 public class LoginInfo {
     @JsonAlias("userName")
@@ -32,4 +33,76 @@ public class LoginInfo {
     private boolean enabled;
     
     private long expiredTime;
+
+    /**
+     * get username.
+     *
+     * @return username
+     */
+    public String getUsername() {
+        return username;
+    }
+
+    /**
+     * set username.
+     *
+     * @param username username
+     */
+    public void setUsername(String username) {
+        this.username = username;
+    }
+
+    /**
+     * get token.
+     *
+     * @return token
+     */
+    public String getToken() {
+        return token;
+    }
+
+    /**
+     * set token.
+     *
+     * @param token token
+     */
+    public void setToken(String token) {
+        this.token = token;
+    }
+
+    /**
+     * is enabled.
+     *
+     * @return enabled
+     */
+    public boolean isEnabled() {
+        return enabled;
+    }
+
+    /**
+     * set enabled.
+     *
+     * @param enabled enabled
+     */
+    public void setEnabled(boolean enabled) {
+        this.enabled = enabled;
+    }
+
+    /**
+     * get expiredTime.
+     *
+     * @return expiredTime
+     */
+    public long getExpiredTime() {
+        return expiredTime;
+    }
+
+    /**
+     * set expiredTime.
+     *
+     * @param expiredTime expiredTime
+     */
+    public void setExpiredTime(long expiredTime) {
+        this.expiredTime = expiredTime;
+    }
 }
diff --git a/shenyu-e2e/shenyu-e2e-client/src/main/java/org/apache/shenyu/e2e/client/admin/model/response/PaginatedResources.java b/shenyu-e2e/shenyu-e2e-client/src/main/java/org/apache/shenyu/e2e/client/admin/model/response/PaginatedResources.java
index 9f950d1e9..4b4dd4fb9 100644
--- a/shenyu-e2e/shenyu-e2e-client/src/main/java/org/apache/shenyu/e2e/client/admin/model/response/PaginatedResources.java
+++ b/shenyu-e2e/shenyu-e2e-client/src/main/java/org/apache/shenyu/e2e/client/admin/model/response/PaginatedResources.java
@@ -17,14 +17,52 @@
 
 package org.apache.shenyu.e2e.client.admin.model.response;
 
-import lombok.Data;
-
 import java.util.List;
 
-@Data
+/**
+ * Paginated resources.
+ *
+ * @param <T> <T>
+ */
 public class PaginatedResources<T extends ResourceDTO> {
     
     private Pagination page;
     
     private List<T> dataList;
+
+    /**
+     * get page.
+     *
+     * @return page
+     */
+    public Pagination getPage() {
+        return page;
+    }
+
+    /**
+     * set page.
+     *
+     * @param page page
+     */
+    public void setPage(Pagination page) {
+        this.page = page;
+    }
+
+    /**
+     * get dataList.
+     *
+     * @return dataList
+     */
+    public List<T> getDataList() {
+        return dataList;
+    }
+
+    /**
+     * set dataList.
+     *
+     * @param dataList dataList
+     */
+    public void setDataList(List<T> dataList) {
+        this.dataList = dataList;
+    }
 }
diff --git a/shenyu-e2e/shenyu-e2e-client/src/main/java/org/apache/shenyu/e2e/client/admin/model/response/Pagination.java b/shenyu-e2e/shenyu-e2e-client/src/main/java/org/apache/shenyu/e2e/client/admin/model/response/Pagination.java
index f418078eb..019a26f9d 100644
--- a/shenyu-e2e/shenyu-e2e-client/src/main/java/org/apache/shenyu/e2e/client/admin/model/response/Pagination.java
+++ b/shenyu-e2e/shenyu-e2e-client/src/main/java/org/apache/shenyu/e2e/client/admin/model/response/Pagination.java
@@ -19,9 +19,10 @@ package org.apache.shenyu.e2e.client.admin.model.response;
 
 import com.fasterxml.jackson.annotation.JsonAlias;
 import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
-import lombok.Data;
 
-@Data
+/**
+ * Pagination.
+ */
 @JsonIgnoreProperties(ignoreUnknown = true)
 public class Pagination {
 
@@ -35,16 +36,76 @@ public class Pagination {
     
     @JsonAlias({"pages", "totalPage"})
     private int totalPage;
-//
-//
-//
-//    private boolean hasNextPage;
-//    private int size;
-//    private int startRow;
-//    private int endRow;
-//
-//    private int pages;
-//    private int pageNum;
-//    private int pageSize;
 
+    /**
+     * get currentPage.
+     *
+     * @return currentPage
+     */
+    public int getCurrentPage() {
+        return currentPage;
+    }
+
+    /**
+     * set currentPage
+     *
+     * @param currentPage currentPage
+     */
+    public void setCurrentPage(int currentPage) {
+        this.currentPage = currentPage;
+    }
+
+    /**
+     * get pageSize.
+     *
+     * @return pageSize
+     */
+    public int getPageSize() {
+        return pageSize;
+    }
+
+    /**
+     * set pageSize.
+     *
+     * @param pageSize pageSize
+     */
+    public void setPageSize(int pageSize) {
+        this.pageSize = pageSize;
+    }
+
+    /**
+     * get totalSize
+     *
+     * @return totalSize.
+     */
+    public int getTotalSize() {
+        return totalSize;
+    }
+
+    /**
+     * set totalSize.
+     *
+     * @param totalSize totalSize
+     */
+    public void setTotalSize(int totalSize) {
+        this.totalSize = totalSize;
+    }
+
+    /**
+     * get totalPage.
+     *
+     * @return totalPage
+     */
+    public int getTotalPage() {
+        return totalPage;
+    }
+
+    /**
+     * set totalPage.
+     *
+     * @param totalPage totalPage
+     */
+    public void setTotalPage(int totalPage) {
+        this.totalPage = totalPage;
+    }
 }
diff --git a/shenyu-e2e/shenyu-e2e-client/src/main/java/org/apache/shenyu/e2e/client/admin/model/response/PluginDTO.java b/shenyu-e2e/shenyu-e2e-client/src/main/java/org/apache/shenyu/e2e/client/admin/model/response/PluginDTO.java
index 7094e4b1a..cc144242f 100644
--- a/shenyu-e2e/shenyu-e2e-client/src/main/java/org/apache/shenyu/e2e/client/admin/model/response/PluginDTO.java
+++ b/shenyu-e2e/shenyu-e2e-client/src/main/java/org/apache/shenyu/e2e/client/admin/model/response/PluginDTO.java
@@ -18,22 +18,177 @@
 package org.apache.shenyu.e2e.client.admin.model.response;
 
 import com.fasterxml.jackson.annotation.JsonFormat;
-import lombok.Data;
 
 import java.util.Date;
 
-@Data
+/**
+ * PluginDTO.
+ */
 public class PluginDTO implements ResourceDTO {
     
     private String id;
+
     private String name;
+
     private String role;
+
     private int sort;
+
     private boolean enabled;
+
     private String config;
     
     @JsonFormat(pattern = "YYYY-MM-dd HH:mm:ss")
     private Date dateCreated;
+
     @JsonFormat(pattern = "YYYY-MM-dd HH:mm:ss")
     private Date dateUpdated;
+
+    /**
+     * get id.
+     *
+     * @return id
+     */
+    @Override
+    public String getId() {
+        return id;
+    }
+
+    /**
+     * set id.
+     *
+     * @param id id
+     */
+    public void setId(String id) {
+        this.id = id;
+    }
+
+    /**
+     * get name.
+     *
+     * @return name
+     */
+    @Override
+    public String getName() {
+        return name;
+    }
+
+    /**
+     * set name.
+     *
+     * @param name name
+     */
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    /**
+     * get role.
+     *
+     * @return role
+     */
+    public String getRole() {
+        return role;
+    }
+
+    /**
+     * set role.
+     *
+     * @param role role
+     */
+    public void setRole(String role) {
+        this.role = role;
+    }
+
+    /**
+     * get sort.
+     *
+     * @return sort
+     */
+    public int getSort() {
+        return sort;
+    }
+
+    /**
+     * set sort.
+     *
+     * @param sort sort
+     */
+    public void setSort(int sort) {
+        this.sort = sort;
+    }
+
+    /**
+     * is enabled.
+     *
+     * @return enabled
+     */
+    public boolean isEnabled() {
+        return enabled;
+    }
+
+    /**
+     * set enabled.
+     *
+     * @param enabled enabled
+     */
+    public void setEnabled(boolean enabled) {
+        this.enabled = enabled;
+    }
+
+    /**
+     * get config.
+     *
+     * @return config
+     */
+    public String getConfig() {
+        return config;
+    }
+
+    /**
+     * set config.
+     *
+     * @param config config
+     */
+    public void setConfig(String config) {
+        this.config = config;
+    }
+
+    /**
+     * get dateCreated.
+     *
+     * @return dateCreated
+     */
+    @Override
+    public Date getDateCreated() {
+        return dateCreated;
+    }
+
+    /**
+     * set dateCreated.
+     *
+     * @param dateCreated dateCreated
+     */
+    public void setDateCreated(Date dateCreated) {
+        this.dateCreated = dateCreated;
+    }
+
+    /**
+     * get dateUpdated.
+     *
+     * @return dateUpdated
+     */
+    @Override
+    public Date getDateUpdated() {
+        return dateUpdated;
+    }
+
+    /**
+     * set dateUpdated.
+     *
+     * @param dateUpdated dateUpdated
+     */
+    public void setDateUpdated(Date dateUpdated) {
+        this.dateUpdated = dateUpdated;
+    }
 }
diff --git a/shenyu-e2e/shenyu-e2e-client/src/main/java/org/apache/shenyu/e2e/client/admin/model/response/ResourceDTO.java b/shenyu-e2e/shenyu-e2e-client/src/main/java/org/apache/shenyu/e2e/client/admin/model/response/ResourceDTO.java
index 74b505779..c7d9f9996 100644
--- a/shenyu-e2e/shenyu-e2e-client/src/main/java/org/apache/shenyu/e2e/client/admin/model/response/ResourceDTO.java
+++ b/shenyu-e2e/shenyu-e2e-client/src/main/java/org/apache/shenyu/e2e/client/admin/model/response/ResourceDTO.java
@@ -17,7 +17,6 @@
 
 package org.apache.shenyu.e2e.client.admin.model.response;
 
-import com.fasterxml.jackson.annotation.JsonFormat;
 import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
 
 import java.util.Date;
diff --git a/shenyu-e2e/shenyu-e2e-client/src/main/java/org/apache/shenyu/e2e/client/admin/model/response/RuleDTO.java b/shenyu-e2e/shenyu-e2e-client/src/main/java/org/apache/shenyu/e2e/client/admin/model/response/RuleDTO.java
index abb908246..adde30275 100644
--- a/shenyu-e2e/shenyu-e2e-client/src/main/java/org/apache/shenyu/e2e/client/admin/model/response/RuleDTO.java
+++ b/shenyu-e2e/shenyu-e2e-client/src/main/java/org/apache/shenyu/e2e/client/admin/model/response/RuleDTO.java
@@ -20,11 +20,12 @@ package org.apache.shenyu.e2e.client.admin.model.response;
 import com.fasterxml.jackson.annotation.JsonAlias;
 import com.fasterxml.jackson.annotation.JsonFormat;
 import com.fasterxml.jackson.databind.JsonNode;
-import lombok.Data;
 
 import java.util.Date;
 
-@Data
+/**
+ * RuleDTO.
+ */
 public class RuleDTO implements ResourceDTO {
     
     private String id;
@@ -50,7 +51,227 @@ public class RuleDTO implements ResourceDTO {
 
     @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
     private Date dateCreated;
+
     @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
     private Date dateUpdated;
-    
+
+    /**
+     * get id.
+     *
+     * @return id
+     */
+    @Override
+    public String getId() {
+        return id;
+    }
+
+    /**
+     * set id.
+     *
+     * @param id id
+     */
+    public void setId(String id) {
+        this.id = id;
+    }
+
+    /**
+     * get name.
+     *
+     * @return name
+     */
+    @Override
+    public String getName() {
+        return name;
+    }
+
+    /**
+     * set name.
+     *
+     * @param name name
+     */
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    /**
+     * get selectorId.
+     *
+     * @return selectorId
+     */
+    public String getSelectorId() {
+        return selectorId;
+    }
+
+    /**
+     * set selectorId.
+     *
+     * @param selectorId selectorId
+     */
+    public void setSelectorId(String selectorId) {
+        this.selectorId = selectorId;
+    }
+
+    /**
+     * get matchMode.
+     *
+     * @return matchMode
+     */
+    public int getMatchMode() {
+        return matchMode;
+    }
+
+    /**
+     * set matchMode.
+     *
+     * @param matchMode matchMode
+     */
+    public void setMatchMode(int matchMode) {
+        this.matchMode = matchMode;
+    }
+
+    /**
+     * get matchModeName.
+     *
+     * @return matchModeName
+     */
+    public String getMatchModeName() {
+        return matchModeName;
+    }
+
+    /**
+     * set matchModeName.
+     *
+     * @param matchModeName matchModeName
+     */
+    public void setMatchModeName(String matchModeName) {
+        this.matchModeName = matchModeName;
+    }
+
+    /**
+     * get sort.
+     *
+     * @return sort
+     */
+    public int getSort() {
+        return sort;
+    }
+
+    /**
+     * set sort.
+     *
+     * @param sort sort
+     */
+    public void setSort(int sort) {
+        this.sort = sort;
+    }
+
+    /**
+     * is logged.
+     *
+     * @return
+     */
+    public boolean isLogged() {
+        return logged;
+    }
+
+    /**
+     * set logged.
+     *
+     * @param logged logged
+     */
+    public void setLogged(boolean logged) {
+        this.logged = logged;
+    }
+
+    /**
+     * is enabled.
+     *
+     * @return enabled
+     */
+    public boolean isEnabled() {
+        return enabled;
+    }
+
+    /**
+     * set enabled.
+     *
+     * @param enabled enabled
+     */
+    public void setEnabled(boolean enabled) {
+        this.enabled = enabled;
+    }
+
+    /**
+     * get handle.
+     *
+     * @return handle
+     */
+    public String getHandle() {
+        return handle;
+    }
+
+    /**
+     * set handle.
+     *
+     * @param handle handle
+     */
+    public void setHandle(String handle) {
+        this.handle = handle;
+    }
+
+    /**
+     * get ruleConditions.
+     *
+     * @return ruleConditions
+     */
+    public JsonNode getRuleConditions() {
+        return ruleConditions;
+    }
+
+    /**
+     * set ruleConditions.
+     *
+     * @param ruleConditions ruleConditions
+     */
+    public void setRuleConditions(JsonNode ruleConditions) {
+        this.ruleConditions = ruleConditions;
+    }
+
+    /**
+     * get dateCreated.
+     *
+     * @return dateCreated
+     */
+    @Override
+    public Date getDateCreated() {
+        return dateCreated;
+    }
+
+    /**
+     * set dateCreated.
+     *
+     * @param dateCreated dateCreated
+     */
+    public void setDateCreated(Date dateCreated) {
+        this.dateCreated = dateCreated;
+    }
+
+    /**
+     * get dateUpdated.
+     *
+     * @return dateUpdated
+     */
+    @Override
+    public Date getDateUpdated() {
+        return dateUpdated;
+    }
+
+    /**
+     * set dateUpdated.
+     *
+     * @param dateUpdated dateUpdated
+     */
+    public void setDateUpdated(Date dateUpdated) {
+        this.dateUpdated = dateUpdated;
+    }
 }
diff --git a/shenyu-e2e/shenyu-e2e-client/src/main/java/org/apache/shenyu/e2e/client/admin/model/response/SearchedResources.java b/shenyu-e2e/shenyu-e2e-client/src/main/java/org/apache/shenyu/e2e/client/admin/model/response/SearchedResources.java
index caae64a24..b92550ffb 100644
--- a/shenyu-e2e/shenyu-e2e-client/src/main/java/org/apache/shenyu/e2e/client/admin/model/response/SearchedResources.java
+++ b/shenyu-e2e/shenyu-e2e-client/src/main/java/org/apache/shenyu/e2e/client/admin/model/response/SearchedResources.java
@@ -18,19 +18,114 @@
 package org.apache.shenyu.e2e.client.admin.model.response;
 
 import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
-import lombok.Data;
 
 import java.util.List;
 
-@Data
+/**
+ * Searched resources.
+ *
+ * @param <T> <T>
+ */
 @JsonIgnoreProperties(ignoreUnknown = true)
 public class SearchedResources<T extends ResourceDTO> {
     
     private int pageNum;
+
     private int pageSize;
+
     private int total;
+
     private int pages;
     
     private List<T> list;
-    
+
+    /**
+     * get pageNum.
+     *
+     * @return pageNum
+     */
+    public int getPageNum() {
+        return pageNum;
+    }
+
+    /**
+     * set pageNum.
+     *
+     * @param pageNum pageNum
+     */
+    public void setPageNum(int pageNum) {
+        this.pageNum = pageNum;
+    }
+
+    /**
+     * get pageSize.
+     *
+     * @return pageSize
+     */
+    public int getPageSize() {
+        return pageSize;
+    }
+
+    /**
+     * set pageSize.
+     *
+     * @param pageSize pageSize
+     */
+    public void setPageSize(int pageSize) {
+        this.pageSize = pageSize;
+    }
+
+    /**
+     * get total.
+     *
+     * @return total
+     */
+    public int getTotal() {
+        return total;
+    }
+
+    /**
+     * set total.
+     *
+     * @param total total
+     */
+    public void setTotal(int total) {
+        this.total = total;
+    }
+
+    /**
+     * get pages.
+     *
+     * @return pages
+     */
+    public int getPages() {
+        return pages;
+    }
+
+    /**
+     * set pages.
+     *
+     * @param pages pages
+     */
+    public void setPages(int pages) {
+        this.pages = pages;
+    }
+
+    /**
+     * get list.
+     *
+     * @return list
+     */
+    public List<T> getList() {
+        return list;
+    }
+
+    /**
+     * set list.
+     *
+     * @param list list
+     */
+    public void setList(List<T> list) {
+        this.list = list;
+    }
 }
diff --git a/shenyu-e2e/shenyu-e2e-client/src/main/java/org/apache/shenyu/e2e/client/admin/model/response/SelectorDTO.java b/shenyu-e2e/shenyu-e2e-client/src/main/java/org/apache/shenyu/e2e/client/admin/model/response/SelectorDTO.java
index 099d410c6..52a1182e6 100644
--- a/shenyu-e2e/shenyu-e2e-client/src/main/java/org/apache/shenyu/e2e/client/admin/model/response/SelectorDTO.java
+++ b/shenyu-e2e/shenyu-e2e-client/src/main/java/org/apache/shenyu/e2e/client/admin/model/response/SelectorDTO.java
@@ -19,13 +19,14 @@ package org.apache.shenyu.e2e.client.admin.model.response;
 
 import com.fasterxml.jackson.annotation.JsonFormat;
 import com.fasterxml.jackson.annotation.JsonProperty;
-import lombok.Data;
 import org.apache.shenyu.e2e.client.admin.model.data.Condition;
 
 import java.util.Date;
 import java.util.List;
 
-@Data
+/**
+ * SelectorDTO.
+ */
 public class SelectorDTO implements ResourceDTO {
     
     private String id;
@@ -33,15 +34,22 @@ public class SelectorDTO implements ResourceDTO {
     private String pluginId;
     
     private String name;
+
     private int matchMode;
+
     private String matchModeName;
+
     private int type;
+
     private String typeName;
     
     private int sort;
+
     private boolean enabled;
+
     @JsonProperty(value = "loged")
     private boolean logged;
+
     private boolean continued;
     
     private String handle;
@@ -51,7 +59,281 @@ public class SelectorDTO implements ResourceDTO {
     
     @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss.SSS")
     private Date dateCreated;
+
     @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss.SSS")
     private Date dateUpdated;
-    
+
+    /**
+     * get id.
+     *
+     * @return id
+     */
+    @Override
+    public String getId() {
+        return id;
+    }
+
+    /**
+     * set id.
+     *
+     * @param id id
+     */
+    public void setId(String id) {
+        this.id = id;
+    }
+
+    /**
+     * get pluginId.
+     *
+     * @return pluginId
+     */
+    public String getPluginId() {
+        return pluginId;
+    }
+
+    /**
+     * set pluginId.
+     *
+     * @param pluginId pluginId
+     */
+    public void setPluginId(String pluginId) {
+        this.pluginId = pluginId;
+    }
+
+    /**
+     * get name.
+     *
+     * @return name
+     */
+    @Override
+    public String getName() {
+        return name;
+    }
+
+    /**
+     * set name.
+     *
+     * @param name name
+     */
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    /**
+     * get matchMode.
+     *
+     * @return matchMode
+     */
+    public int getMatchMode() {
+        return matchMode;
+    }
+
+    /**
+     * set matchMode.
+     *
+     * @param matchMode matchMode
+     */
+    public void setMatchMode(int matchMode) {
+        this.matchMode = matchMode;
+    }
+
+    /**
+     * get matchModeName.
+     *
+     * @return matchModeName
+     */
+    public String getMatchModeName() {
+        return matchModeName;
+    }
+
+    /**
+     * set matchModeName
+     *
+     * @param matchModeName matchModeName
+     */
+    public void setMatchModeName(String matchModeName) {
+        this.matchModeName = matchModeName;
+    }
+
+    /**
+     * get type.
+     *
+     * @return type
+     */
+    public int getType() {
+        return type;
+    }
+
+    /**
+     * set type.
+     *
+     * @param type type
+     */
+    public void setType(int type) {
+        this.type = type;
+    }
+
+    /**
+     * get typeName.
+     *
+     * @return typeName
+     */
+    public String getTypeName() {
+        return typeName;
+    }
+
+    /**
+     * set typeName.
+     *
+     * @param typeName typeName
+     */
+    public void setTypeName(String typeName) {
+        this.typeName = typeName;
+    }
+
+    /**
+     * get sort.
+     *
+     * @return sort
+     */
+    public int getSort() {
+        return sort;
+    }
+
+    /**
+     * set sort.
+     *
+     * @param sort sort
+     */
+    public void setSort(int sort) {
+        this.sort = sort;
+    }
+
+    /**
+     * is enabled.
+     *
+     * @return enabled
+     */
+    public boolean isEnabled() {
+        return enabled;
+    }
+
+    /**
+     * set enabled.
+     *
+     * @param enabled enabled
+     */
+    public void setEnabled(boolean enabled) {
+        this.enabled = enabled;
+    }
+
+    /**
+     * is logged.
+     *
+     * @return logged
+     */
+    public boolean isLogged() {
+        return logged;
+    }
+
+    /**
+     * set logged.
+     *
+     * @param logged logged
+     */
+    public void setLogged(boolean logged) {
+        this.logged = logged;
+    }
+
+    /**
+     * get continued.
+     *
+     * @return continued
+     */
+    public boolean isContinued() {
+        return continued;
+    }
+
+    /**
+     * set continued.
+     *
+     * @param continued continued
+     */
+    public void setContinued(boolean continued) {
+        this.continued = continued;
+    }
+
+    /**
+     * get handle.
+     *
+     * @return handle
+     */
+    public String getHandle() {
+        return handle;
+    }
+
+    /**
+     * set handle.
+     *
+     * @param handle handle
+     */
+    public void setHandle(String handle) {
+        this.handle = handle;
+    }
+
+    /**
+     * get conditionList.
+     *
+     * @return conditionList
+     */
+    public List<Condition> getConditionList() {
+        return conditionList;
+    }
+
+    /**
+     * set conditionList.
+     *
+     * @param conditionList conditionList
+     */
+    public void setConditionList(List<Condition> conditionList) {
+        this.conditionList = conditionList;
+    }
+
+    /**
+     * get dateCreated.
+     *
+     * @return dateCreated
+     */
+    @Override
+    public Date getDateCreated() {
+        return dateCreated;
+    }
+
+    /**
+     * set dateCreated.
+     *
+     * @param dateCreated dateCreated
+     */
+    public void setDateCreated(Date dateCreated) {
+        this.dateCreated = dateCreated;
+    }
+
+    /**
+     * get dateUpdated.
+     *
+     * @return dateUpdated
+     */
+    @Override
+    public Date getDateUpdated() {
+        return dateUpdated;
+    }
+
+    /**
+     * set dateUpdated.
+     *
+     * @param dateUpdated dateUpdated
+     */
+    public void setDateUpdated(Date dateUpdated) {
+        this.dateUpdated = dateUpdated;
+    }
 }
diff --git a/shenyu-e2e/shenyu-e2e-client/src/main/java/org/apache/shenyu/e2e/client/gateway/GatewayClient.java b/shenyu-e2e/shenyu-e2e-client/src/main/java/org/apache/shenyu/e2e/client/gateway/GatewayClient.java
index 29118ebfa..d04bca4ee 100644
--- a/shenyu-e2e/shenyu-e2e-client/src/main/java/org/apache/shenyu/e2e/client/gateway/GatewayClient.java
+++ b/shenyu-e2e/shenyu-e2e-client/src/main/java/org/apache/shenyu/e2e/client/gateway/GatewayClient.java
@@ -19,11 +19,10 @@ package org.apache.shenyu.e2e.client.gateway;
 
 import io.restassured.response.Response;
 import io.restassured.specification.RequestSpecification;
-import lombok.AllArgsConstructor;
-import lombok.Getter;
-import lombok.extern.slf4j.Slf4j;
 import org.apache.shenyu.e2e.annotation.ShenYuGatewayClient;
 import org.apache.shenyu.e2e.common.RequestLogConsumer;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.slf4j.MDC;
 
 import java.util.Properties;
@@ -35,17 +34,31 @@ import static io.restassured.RestAssured.given;
  * A client to connect to ShenYu bootstrap(Gateway) server over HTTP.
  */
 @ShenYuGatewayClient
-@AllArgsConstructor
-@Slf4j
 public class GatewayClient {
+
+    private static final Logger log = LoggerFactory.getLogger(GatewayClient.class);
     
     private final String scenarioId;
-    
-    @Getter
+
     private final String baseUrl;
     
     private final Properties properties;
-    
+
+    public GatewayClient(String scenarioId, String baseUrl, Properties properties) {
+        this.scenarioId = scenarioId;
+        this.baseUrl = baseUrl;
+        this.properties = properties;
+    }
+
+    /**
+     * get baseUrl.
+     *
+     * @return baseUrl
+     */
+    public String getBaseUrl() {
+        return baseUrl;
+    }
+
     public Supplier<RequestSpecification> getHttpRequesterSupplier() {
         return () -> given().baseUri(getBaseUrl())
                 .filter((req, resp, ctx) -> {
diff --git a/shenyu-e2e/shenyu-e2e-client/src/main/java/org/apache/shenyu/e2e/matcher/RuleMatcher.java b/shenyu-e2e/shenyu-e2e-client/src/main/java/org/apache/shenyu/e2e/matcher/RuleMatcher.java
index 9c22b662c..df570d00c 100644
--- a/shenyu-e2e/shenyu-e2e-client/src/main/java/org/apache/shenyu/e2e/matcher/RuleMatcher.java
+++ b/shenyu-e2e/shenyu-e2e-client/src/main/java/org/apache/shenyu/e2e/matcher/RuleMatcher.java
@@ -17,10 +17,11 @@
 
 package org.apache.shenyu.e2e.matcher;
 
+import com.fasterxml.jackson.core.JsonProcessingException;
 import com.fasterxml.jackson.databind.ObjectMapper;
-import lombok.SneakyThrows;
 import org.apache.shenyu.e2e.client.admin.model.data.RuleData;
 import org.apache.shenyu.e2e.client.admin.model.response.RuleDTO;
+import org.json.JSONException;
 import org.skyscreamer.jsonassert.JSONAssert;
 import org.skyscreamer.jsonassert.JSONCompareMode;
 
@@ -33,16 +34,27 @@ import static org.hamcrest.Matchers.hasProperty;
 import static org.hamcrest.Matchers.isEmptyOrNullString;
 import static org.hamcrest.Matchers.notNullValue;
 
+/**
+ * Rule matcher.
+ */
 public class RuleMatcher {
+
     private final ObjectMapper mapper = new ObjectMapper();
+
     private final RuleData expected;
     
     public RuleMatcher(RuleData expected) {
         this.expected = expected;
     }
-    
-    @SneakyThrows
-    public void matches(RuleDTO actual) {
+
+    /**
+     *
+     *
+     * @param actual actual
+     * @throws JsonProcessingException JsonProcessingException
+     * @throws JSONException JSONException
+     */
+    public void matches(RuleDTO actual) throws JsonProcessingException, JSONException {
         String handle = actual.getHandle();
         if (Objects.nonNull(expected.getHandle())) {
             String expected = mapper.writer().writeValueAsString(this.expected.getHandle());
diff --git a/shenyu-e2e/shenyu-e2e-client/src/main/java/org/apache/shenyu/e2e/matcher/SelectorMatcher.java b/shenyu-e2e/shenyu-e2e-client/src/main/java/org/apache/shenyu/e2e/matcher/SelectorMatcher.java
index a77f361f1..65f6e5dbd 100644
--- a/shenyu-e2e/shenyu-e2e-client/src/main/java/org/apache/shenyu/e2e/matcher/SelectorMatcher.java
+++ b/shenyu-e2e/shenyu-e2e-client/src/main/java/org/apache/shenyu/e2e/matcher/SelectorMatcher.java
@@ -17,10 +17,11 @@
 
 package org.apache.shenyu.e2e.matcher;
 
+import com.fasterxml.jackson.core.JsonProcessingException;
 import com.fasterxml.jackson.databind.ObjectMapper;
-import lombok.SneakyThrows;
 import org.apache.shenyu.e2e.client.admin.model.data.SelectorData;
 import org.apache.shenyu.e2e.client.admin.model.response.SelectorDTO;
+import org.json.JSONException;
 import org.skyscreamer.jsonassert.JSONAssert;
 import org.skyscreamer.jsonassert.JSONCompareMode;
 
@@ -33,6 +34,9 @@ import static org.hamcrest.Matchers.hasProperty;
 import static org.hamcrest.Matchers.isEmptyOrNullString;
 import static org.hamcrest.Matchers.notNullValue;
 
+/**
+ * Selector matcher.
+ */
 public class SelectorMatcher {
     private final ObjectMapper mapper = new ObjectMapper();
     private final SelectorData expected;
@@ -40,9 +44,8 @@ public class SelectorMatcher {
     private SelectorMatcher(SelectorData expected) {
         this.expected = expected;
     }
-    
-    @SneakyThrows
-    public void matches(SelectorDTO actual) {
+
+    public void matches(SelectorDTO actual) throws JsonProcessingException, JSONException {
         String handle = actual.getHandle();
         if (Objects.nonNull(expected.getHandle())) {
             String expected = mapper.writer().writeValueAsString(this.expected.getHandle());
diff --git a/shenyu-e2e/shenyu-e2e-client/src/test/java/org/apache/shenyu/e2e/client/admin/AdminClientTest.java b/shenyu-e2e/shenyu-e2e-client/src/test/java/org/apache/shenyu/e2e/client/admin/AdminClientTest.java
index dac2d74ee..f75682646 100644
--- a/shenyu-e2e/shenyu-e2e-client/src/test/java/org/apache/shenyu/e2e/client/admin/AdminClientTest.java
+++ b/shenyu-e2e/shenyu-e2e-client/src/test/java/org/apache/shenyu/e2e/client/admin/AdminClientTest.java
@@ -17,8 +17,8 @@
 
 package org.apache.shenyu.e2e.client.admin;
 
+import com.fasterxml.jackson.core.JsonProcessingException;
 import com.google.common.collect.Lists;
-import lombok.extern.slf4j.Slf4j;
 import org.apache.shenyu.e2e.client.admin.model.MatchMode;
 import org.apache.shenyu.e2e.client.admin.model.Plugin;
 import org.apache.shenyu.e2e.client.admin.model.SelectorType;
@@ -36,6 +36,7 @@ import org.apache.shenyu.e2e.client.admin.model.response.SelectorDTO;
 import org.apache.shenyu.e2e.matcher.RuleMatcher;
 import org.apache.shenyu.e2e.matcher.SelectorMatcher;
 import org.assertj.core.api.Assertions;
+import org.json.JSONException;
 import org.junit.jupiter.api.AfterAll;
 import org.junit.jupiter.api.AfterEach;
 import org.junit.jupiter.api.BeforeAll;
@@ -44,6 +45,8 @@ import org.junit.jupiter.api.MethodOrderer;
 import org.junit.jupiter.api.Order;
 import org.junit.jupiter.api.Test;
 import org.junit.jupiter.api.TestMethodOrder;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.testcontainers.containers.GenericContainer;
 import org.testcontainers.containers.output.Slf4jLogConsumer;
 import org.testcontainers.containers.wait.strategy.HttpWaitStrategy;
@@ -53,10 +56,12 @@ import java.time.Duration;
 import java.util.List;
 import java.util.Properties;
 
-@Slf4j
 @Testcontainers
 @TestMethodOrder(MethodOrderer.OrderAnnotation.class)
 public class AdminClientTest {
+
+    private static final Logger log = LoggerFactory.getLogger(AdminClientTest.class);
+
     static AdminClient client;
 
     static GenericContainer<?> container = new GenericContainer<>("shenyu/admin:latest")
@@ -64,6 +69,7 @@ public class AdminClientTest {
             .withLogConsumer(new Slf4jLogConsumer(log));
     
     SelectorDTO selector;
+
     RuleDTO rule;
     
     @BeforeAll
@@ -132,7 +138,7 @@ public class AdminClientTest {
     }
     
     @Test
-    void testCreateSelector() {
+    void testCreateSelector() throws JSONException, JsonProcessingException {
         SelectorData selectorData = SelectorData.builder()
                 .name("test-create-selector")
                 .plugin(Plugin.DIVIDE)
@@ -158,7 +164,7 @@ public class AdminClientTest {
     }
     
     @Test
-    void testCreateRule() {
+    void testCreateRule() throws JSONException, JsonProcessingException {
         RuleData ruleData = RuleData.builder()
                 .name("test-create-rule")
                 .enabled(true)
diff --git a/shenyu-e2e/shenyu-e2e-common/src/main/java/org/apache/shenyu/e2e/common/IdGenerator.java b/shenyu-e2e/shenyu-e2e-common/src/main/java/org/apache/shenyu/e2e/common/IdGenerator.java
index ba71112a4..43ed5a489 100644
--- a/shenyu-e2e/shenyu-e2e-common/src/main/java/org/apache/shenyu/e2e/common/IdGenerator.java
+++ b/shenyu-e2e/shenyu-e2e-common/src/main/java/org/apache/shenyu/e2e/common/IdGenerator.java
@@ -19,6 +19,9 @@ package org.apache.shenyu.e2e.common;
 
 import java.time.LocalTime;
 
+/**
+ * Id Generator.
+ */
 public class IdGenerator {
     
     public static String generateScenarioId() {
diff --git a/shenyu-e2e/shenyu-e2e-common/src/main/java/org/apache/shenyu/e2e/common/IdManagers.java b/shenyu-e2e/shenyu-e2e-common/src/main/java/org/apache/shenyu/e2e/common/IdManagers.java
index 634858412..202ee6892 100644
--- a/shenyu-e2e/shenyu-e2e-common/src/main/java/org/apache/shenyu/e2e/common/IdManagers.java
+++ b/shenyu-e2e/shenyu-e2e-common/src/main/java/org/apache/shenyu/e2e/common/IdManagers.java
@@ -19,15 +19,31 @@ package org.apache.shenyu.e2e.common;
 
 import com.google.common.collect.BiMap;
 import com.google.common.collect.HashBiMap;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
+import java.util.Map;
+import java.util.StringJoiner;
+
+/**
+ * Id mangers.
+ */
 public class IdManagers {
+
+    private static final Logger log = LoggerFactory.getLogger(IdManagers.class);
+
     public enum Plugins {
         INSTANCE;
         
         private BiMap<String, String> name2id;
         public void set(BiMap<String, String> name2id) {
             this.name2id = name2id;
-            System.out.println("plugin list: " + name2id); // TODO
+            StringJoiner joiner = new StringJoiner(",");
+            for (Map.Entry entry : name2id.entrySet()) {
+                joiner.add(entry.getKey().toString());
+            }
+            log.info("plugin list: " + joiner);
+
         }
         
         public String getIdByName(String name) {
diff --git a/shenyu-e2e/shenyu-e2e-common/src/main/java/org/apache/shenyu/e2e/common/NameUtils.java b/shenyu-e2e/shenyu-e2e-common/src/main/java/org/apache/shenyu/e2e/common/NameUtils.java
index 4faafc459..1f4a9c113 100644
--- a/shenyu-e2e/shenyu-e2e-common/src/main/java/org/apache/shenyu/e2e/common/NameUtils.java
+++ b/shenyu-e2e/shenyu-e2e-common/src/main/java/org/apache/shenyu/e2e/common/NameUtils.java
@@ -17,6 +17,9 @@
 
 package org.apache.shenyu.e2e.common;
 
+/**
+ * Utils for concatenating names.
+ */
 public class NameUtils {
     
     public static String wrap(String name, String scenarioId) {
diff --git a/shenyu-e2e/shenyu-e2e-common/src/main/java/org/apache/shenyu/e2e/common/RequestLogConsumer.java b/shenyu-e2e/shenyu-e2e-common/src/main/java/org/apache/shenyu/e2e/common/RequestLogConsumer.java
index 9b1bce1fd..b94ffa9dc 100644
--- a/shenyu-e2e/shenyu-e2e-common/src/main/java/org/apache/shenyu/e2e/common/RequestLogConsumer.java
+++ b/shenyu-e2e/shenyu-e2e-common/src/main/java/org/apache/shenyu/e2e/common/RequestLogConsumer.java
@@ -29,6 +29,9 @@ import java.io.PrintStream;
 import java.nio.charset.Charset;
 import java.util.Collections;
 
+/**
+ * Consume request log.
+ */
 public class RequestLogConsumer {
     private static final OutputStream FAKE_STREAM = new OutputStream() {
         @Override
diff --git a/shenyu-e2e/shenyu-e2e-common/src/main/java/org/apache/shenyu/e2e/common/TableView.java b/shenyu-e2e/shenyu-e2e-common/src/main/java/org/apache/shenyu/e2e/common/TableView.java
index 6c3a5858d..8ef0244d8 100644
--- a/shenyu-e2e/shenyu-e2e-common/src/main/java/org/apache/shenyu/e2e/common/TableView.java
+++ b/shenyu-e2e/shenyu-e2e-common/src/main/java/org/apache/shenyu/e2e/common/TableView.java
@@ -21,10 +21,15 @@ import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.List;
 
+/**
+ * Table view.
+ */
 public class TableView {
+
     private List<String[]> table = new ArrayList<>();
     
     private final int sizeOfColumnsInRow;
+
     private final String[] headers;
     
     private int[] maxContentLengthOfColumns;
diff --git a/shenyu-e2e/shenyu-e2e-engine/src/main/java/org/apache/shenyu/e2e/engine/ShenYuExtension.java b/shenyu-e2e/shenyu-e2e-engine/src/main/java/org/apache/shenyu/e2e/engine/ShenYuExtension.java
index fcbd38cae..8b63e3f0e 100644
--- a/shenyu-e2e/shenyu-e2e-engine/src/main/java/org/apache/shenyu/e2e/engine/ShenYuExtension.java
+++ b/shenyu-e2e/shenyu-e2e-engine/src/main/java/org/apache/shenyu/e2e/engine/ShenYuExtension.java
@@ -40,9 +40,15 @@ import org.testcontainers.DockerClientFactory;
 
 import java.util.Objects;
 
+/**
+ * ShenYu extension.
+ */
 public class ShenYuExtension implements BeforeAllCallback, ExecutionCondition, AfterAllCallback, ParameterResolver {
+
     private static final Namespace NAMESPACE = Namespace.create(ShenYuExtension.class);
+
     private static final String KEY_EXTENSION_CONTEXT = "_shenyu_service_compose_";
+
     private static final String KEY_ENGINE_CONFIGURE = "_shenyu_engine_configure_";
     
     @Override
@@ -75,7 +81,7 @@ public class ShenYuExtension implements BeforeAllCallback, ExecutionCondition, A
         
         return ConditionEvaluationResult.enabled("ShenYu test engine is available");
     }
-    
+
     private boolean isDockerAvailable() {
         try {
             DockerClientFactory.instance().client();
diff --git a/shenyu-e2e/shenyu-e2e-engine/src/main/java/org/apache/shenyu/e2e/engine/ShenYuExtensionContext.java b/shenyu-e2e/shenyu-e2e-engine/src/main/java/org/apache/shenyu/e2e/engine/ShenYuExtensionContext.java
index 269efc83d..f52f299f0 100644
--- a/shenyu-e2e/shenyu-e2e-engine/src/main/java/org/apache/shenyu/e2e/engine/ShenYuExtensionContext.java
+++ b/shenyu-e2e/shenyu-e2e-engine/src/main/java/org/apache/shenyu/e2e/engine/ShenYuExtensionContext.java
@@ -19,7 +19,6 @@ package org.apache.shenyu.e2e.engine;
 
 import com.google.common.collect.Maps;
 import junit.framework.AssertionFailedError;
-import lombok.Getter;
 import org.apache.shenyu.e2e.client.ExternalServiceClient;
 import org.apache.shenyu.e2e.client.admin.AdminClient;
 import org.apache.shenyu.e2e.client.gateway.GatewayClient;
@@ -32,12 +31,17 @@ import org.apache.shenyu.e2e.engine.service.ServiceCompose;
 import java.util.Map;
 import java.util.Objects;
 
+/**
+ * Start the project using the corresponding method based on the selected configuration.
+ */
 public class ShenYuExtensionContext {
-    @Getter
+
     private final String scenarioId;
     
     private final ServiceCompose serviceCompose;
+
     private AdminClient adminClient;
+
     private GatewayClient gatewayClient;
     
     private Map<String, ExternalServiceClient> externalServiceClientMap;
@@ -91,5 +95,13 @@ public class ShenYuExtensionContext {
     public void cleanup() {
         serviceCompose.stop();
     }
-    
+
+    /**
+     * get scenarioId.
+     *
+     * @return scenarioId
+     */
+    public String getScenarioId() {
+        return scenarioId;
+    }
 }
diff --git a/shenyu-e2e/shenyu-e2e-engine/src/main/java/org/apache/shenyu/e2e/engine/ShenYuLogExtension.java b/shenyu-e2e/shenyu-e2e-engine/src/main/java/org/apache/shenyu/e2e/engine/ShenYuLogExtension.java
index b59d6f9a4..aaa35e1d5 100644
--- a/shenyu-e2e/shenyu-e2e-engine/src/main/java/org/apache/shenyu/e2e/engine/ShenYuLogExtension.java
+++ b/shenyu-e2e/shenyu-e2e-engine/src/main/java/org/apache/shenyu/e2e/engine/ShenYuLogExtension.java
@@ -24,6 +24,9 @@ import org.slf4j.MDC;
 
 import java.lang.reflect.Method;
 
+/**
+ * ShenYu log extension.
+ */
 public class ShenYuLogExtension implements InvocationInterceptor {
     @Override
     public void interceptBeforeAllMethod(Invocation<Void> invocation, ReflectiveInvocationContext<Method> invocationContext, ExtensionContext extensionContext) throws Throwable {
@@ -33,7 +36,7 @@ public class ShenYuLogExtension implements InvocationInterceptor {
     
     @Override
     public void interceptBeforeEachMethod(Invocation<Void> invocation, ReflectiveInvocationContext<Method> invocationContext, ExtensionContext extensionContext) throws Throwable {
-        MDC.put("phase", "BeforeAll");
+        MDC.put("phase", "BeforeEach");
         invocation.proceed();
     }
     
diff --git a/shenyu-e2e/shenyu-e2e-engine/src/main/java/org/apache/shenyu/e2e/engine/config/ShenYuEngineConfigure.java b/shenyu-e2e/shenyu-e2e-engine/src/main/java/org/apache/shenyu/e2e/engine/config/ShenYuEngineConfigure.java
index 8ef0a7da4..f6e94d7dc 100644
--- a/shenyu-e2e/shenyu-e2e-engine/src/main/java/org/apache/shenyu/e2e/engine/config/ShenYuEngineConfigure.java
+++ b/shenyu-e2e/shenyu-e2e-engine/src/main/java/org/apache/shenyu/e2e/engine/config/ShenYuEngineConfigure.java
@@ -21,8 +21,6 @@ import com.fasterxml.jackson.annotation.JsonValue;
 import com.fasterxml.jackson.databind.ObjectMapper;
 import com.google.common.base.Preconditions;
 import com.google.common.base.Strings;
-import lombok.AllArgsConstructor;
-import lombok.Getter;
 import org.apache.shenyu.e2e.engine.annotation.ShenYuTest;
 import org.apache.shenyu.e2e.engine.annotation.ShenYuTest.Parameter;
 import org.apache.shenyu.e2e.engine.annotation.ShenYuTest.ServiceConfigure;
@@ -38,7 +36,9 @@ import java.util.Properties;
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
 
-@Getter
+/**
+ * ShenYu engine configure.
+ */
 public class ShenYuEngineConfigure {
     
     private static final Pattern EXTRACTOR_PATTERN = Pattern.compile("\\{(.*?)\\}");
@@ -58,8 +58,36 @@ public class ShenYuEngineConfigure {
     public boolean isRunOnDocker() {
         return Mode.DOCKER == mode;
     }
-    
+
+    /**
+     * get mode.
+     *
+     * @return mode
+     */
+    public Mode getMode() {
+        return mode;
+    }
+
+    /**
+     * get hostConfigure.
+     *
+     * @return hostConfigure
+     */
+    public HostConfigure getHostConfigure() {
+        return hostConfigure;
+    }
+
+    /**
+     * get dockerConfigure.
+     *
+     * @return dockerConfigure
+     */
+    public DockerConfigure getDockerConfigure() {
+        return dockerConfigure;
+    }
+
     public enum Mode {
+
         HOST, DOCKER;
         
         @JsonValue
@@ -69,42 +97,205 @@ public class ShenYuEngineConfigure {
     }
     
     public enum ServiceType {
+
         SHENYU_ADMIN,
+
         SHENYU_GATEWAY,
+
         EXTERNAL_SERVICE,
     }
     
-    @Getter
-    @AllArgsConstructor
+
     public static class HostConfigure {
+
         private final HostServiceConfigure admin;
+
         private final HostServiceConfigure gateway;
+
         private final List<HostServiceConfigure> externalServices;
-        
-        @Getter
-        @AllArgsConstructor
+
+
+        public HostConfigure(HostServiceConfigure admin, HostServiceConfigure gateway, List<HostServiceConfigure> externalServices) {
+            this.admin = admin;
+            this.gateway = gateway;
+            this.externalServices = externalServices;
+        }
+
+        /**
+         * get admin.
+         *
+         * @return admin
+         */
+        public HostServiceConfigure getAdmin() {
+            return admin;
+        }
+
+        /**
+         * get gateway.
+         *
+         * @return gateway
+         */
+        public HostServiceConfigure getGateway() {
+            return gateway;
+        }
+
+        /**
+         * get externalServices.
+         *
+         * @return externalServices
+         */
+        public List<HostServiceConfigure> getExternalServices() {
+            return externalServices;
+        }
+
         public static class HostServiceConfigure {
+
             private final String serviceName;
+
             private final String baseUrl;
+
             private final Properties properties;
+
+            public HostServiceConfigure(String serviceName, String baseUrl, Properties properties) {
+                this.serviceName = serviceName;
+                this.baseUrl = baseUrl;
+                this.properties = properties;
+            }
+
+            /**
+             * get serviceName.
+             *
+             * @return serviceName
+             */
+            public String getServiceName() {
+                return serviceName;
+            }
+
+            /**
+             * get baseUrl.
+             *
+             * @return baseUrl
+             */
+            public String getBaseUrl() {
+                return baseUrl;
+            }
+
+            /**
+             * get properties.
+             *
+             * @return properties
+             */
+            public Properties getProperties() {
+                return properties;
+            }
         }
     }
-    
-    @Getter
-    @AllArgsConstructor
+
     public static class DockerConfigure {
+
         private final String dockerComposeFile;
+
         private final DockerServiceConfigure admin;
+
         private final DockerServiceConfigure gateway;
+
         private final List<DockerServiceConfigure> externalServices;
-        
-        @Getter
-        @AllArgsConstructor
+
+        public DockerConfigure(String dockerComposeFile, DockerServiceConfigure admin, DockerServiceConfigure gateway, List<DockerServiceConfigure> externalServices) {
+            this.dockerComposeFile = dockerComposeFile;
+            this.admin = admin;
+            this.gateway = gateway;
+            this.externalServices = externalServices;
+        }
+
+        /**
+         * get dockerComposeFile.
+         *
+         * @return dockerComposeFile
+         */
+        public String getDockerComposeFile() {
+            return dockerComposeFile;
+        }
+
+        /**
+         * get admin.
+         *
+         * @return admin
+         */
+        public DockerServiceConfigure getAdmin() {
+            return admin;
+        }
+
+        /**
+         * get gateway.
+         *
+         * @return gateway
+         */
+        public DockerServiceConfigure getGateway() {
+            return gateway;
+        }
+
+        /**
+         * get externalServices.
+         *
+         * @return
+         */
+        public List<DockerServiceConfigure> getExternalServices() {
+            return externalServices;
+        }
+
         public static class DockerServiceConfigure {
+
             private final String schema;
+
             private final String serviceName;
+
             private final int port;
+
             private final Properties properties;
+
+            public DockerServiceConfigure(String schema, String serviceName, int port, Properties properties) {
+                this.schema = schema;
+                this.serviceName = serviceName;
+                this.port = port;
+                this.properties = properties;
+            }
+
+            /**
+             * get schema.
+             *
+             * @return schema
+             */
+            public String getSchema() {
+                return schema;
+            }
+
+            /**
+             * get serviceName.
+             *
+             * @return serviceName
+             */
+            public String getServiceName() {
+                return serviceName;
+            }
+
+            /**
+             * get port.
+             *
+             * @return port
+             */
+            public int getPort() {
+                return port;
+            }
+
+            /**
+             * get properties.
+             *
+             * @return properties
+             */
+            public Properties getProperties() {
+                return properties;
+            }
         }
     }
     
diff --git a/shenyu-e2e/shenyu-e2e-engine/src/main/java/org/apache/shenyu/e2e/engine/scenario/specification/ScenarioSpec.java b/shenyu-e2e/shenyu-e2e-engine/src/main/java/org/apache/shenyu/e2e/engine/scenario/specification/ScenarioSpec.java
index 0607ac2c1..667c76dde 100644
--- a/shenyu-e2e/shenyu-e2e-engine/src/main/java/org/apache/shenyu/e2e/engine/scenario/specification/ScenarioSpec.java
+++ b/shenyu-e2e/shenyu-e2e-engine/src/main/java/org/apache/shenyu/e2e/engine/scenario/specification/ScenarioSpec.java
@@ -25,7 +25,14 @@ import java.util.Objects;
 public interface ScenarioSpec {
     
     String getName();
-    
+
+    /**
+     * Verify which type the class belongs to.
+     *
+     * @param type type
+     * @return <T>
+     * @param <T> <T>
+     */
     default <T> T getByType(Class<T> type) {
         if (type.isAssignableFrom(BeforeEachSpec.class)) {
             if (Objects.isNull(getBeforeEachSpec())) {
diff --git a/shenyu-e2e/shenyu-e2e-engine/src/main/java/org/apache/shenyu/e2e/engine/scenario/specification/ScenarioSpecLogProxy.java b/shenyu-e2e/shenyu-e2e-engine/src/main/java/org/apache/shenyu/e2e/engine/scenario/specification/ScenarioSpecLogProxy.java
index 3ee95ca8b..09af2aaca 100644
--- a/shenyu-e2e/shenyu-e2e-engine/src/main/java/org/apache/shenyu/e2e/engine/scenario/specification/ScenarioSpecLogProxy.java
+++ b/shenyu-e2e/shenyu-e2e-engine/src/main/java/org/apache/shenyu/e2e/engine/scenario/specification/ScenarioSpecLogProxy.java
@@ -17,7 +17,6 @@
 
 package org.apache.shenyu.e2e.engine.scenario.specification;
 
-import lombok.AllArgsConstructor;
 import org.apache.shenyu.e2e.client.admin.model.ResourcesData;
 import org.apache.shenyu.e2e.engine.scenario.function.Checker;
 import org.apache.shenyu.e2e.engine.scenario.function.Deleter;
@@ -27,10 +26,14 @@ import org.slf4j.MDC;
 
 import java.util.List;
 
-@AllArgsConstructor
 public class ScenarioSpecLogProxy implements ScenarioSpec {
+
     private final ScenarioSpec spec;
-    
+
+    public ScenarioSpecLogProxy(ScenarioSpec spec) {
+        this.spec = spec;
+    }
+
     @Override
     public BeforeEachSpec getBeforeEachSpec() {
         return new BeforeEachSpec() {
diff --git a/shenyu-e2e/shenyu-e2e-engine/src/main/java/org/apache/shenyu/e2e/engine/service/DockerServiceCompose.java b/shenyu-e2e/shenyu-e2e-engine/src/main/java/org/apache/shenyu/e2e/engine/service/DockerServiceCompose.java
index 65e50bc88..9d2ceea17 100644
--- a/shenyu-e2e/shenyu-e2e-engine/src/main/java/org/apache/shenyu/e2e/engine/service/DockerServiceCompose.java
+++ b/shenyu-e2e/shenyu-e2e-engine/src/main/java/org/apache/shenyu/e2e/engine/service/DockerServiceCompose.java
@@ -20,8 +20,6 @@ package org.apache.shenyu.e2e.engine.service;
 import com.google.common.collect.ImmutableList;
 import com.google.common.collect.ImmutableList.Builder;
 import junit.framework.AssertionFailedError;
-import lombok.Getter;
-import lombok.extern.slf4j.Slf4j;
 import org.apache.shenyu.e2e.client.ExternalServiceClient;
 import org.apache.shenyu.e2e.client.admin.AdminClient;
 import org.apache.shenyu.e2e.client.gateway.GatewayClient;
@@ -30,6 +28,8 @@ import org.apache.shenyu.e2e.engine.config.ShenYuEngineConfigure.DockerConfigure
 import org.apache.shenyu.e2e.engine.config.ShenYuEngineConfigure.DockerConfigure.DockerServiceConfigure;
 import org.apache.shenyu.e2e.engine.service.docker.DockerComposeFile;
 import org.apache.shenyu.e2e.engine.service.docker.ShenYuLogConsumer;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.testcontainers.containers.ContainerState;
 import org.testcontainers.containers.DockerComposeContainer;
 
@@ -37,17 +37,23 @@ import java.util.List;
 import java.util.Objects;
 import java.util.Optional;
 
-@Slf4j
-@Getter
+/**
+ * Start docker environment.
+ */
 public class DockerServiceCompose implements ServiceCompose {
+
+    private static final Logger log = LoggerFactory.getLogger(DockerServiceCompose.class);
+
     private final DockerComposeContainer<?> container;
+
     private final DockerConfigure configure;
     
     private final DockerServiceConfigure adminConfigure;
+
     private final DockerServiceConfigure gatewayConfigure;
-    
+
     private List<DockerServiceConfigure> externalServiceConfigurations;
-    
+
     public DockerServiceCompose(DockerConfigure configure) {
         this.configure = configure;
         this.adminConfigure = configure.getAdmin();
diff --git a/shenyu-e2e/shenyu-e2e-engine/src/main/java/org/apache/shenyu/e2e/engine/service/HostServiceCompose.java b/shenyu-e2e/shenyu-e2e-engine/src/main/java/org/apache/shenyu/e2e/engine/service/HostServiceCompose.java
index 50684eb9c..ff8b34633 100644
--- a/shenyu-e2e/shenyu-e2e-engine/src/main/java/org/apache/shenyu/e2e/engine/service/HostServiceCompose.java
+++ b/shenyu-e2e/shenyu-e2e-engine/src/main/java/org/apache/shenyu/e2e/engine/service/HostServiceCompose.java
@@ -19,8 +19,6 @@ package org.apache.shenyu.e2e.engine.service;
 
 import com.google.common.collect.Lists;
 import junit.framework.AssertionFailedError;
-import lombok.AllArgsConstructor;
-import lombok.Getter;
 import org.apache.shenyu.e2e.client.ExternalServiceClient;
 import org.apache.shenyu.e2e.client.admin.AdminClient;
 import org.apache.shenyu.e2e.client.gateway.GatewayClient;
@@ -30,12 +28,26 @@ import org.apache.shenyu.e2e.engine.config.ShenYuEngineConfigure.HostConfigure.H
 import java.util.List;
 import java.util.Objects;
 
-@Getter
-@AllArgsConstructor
+/**
+ * Start host environment.
+ */
 public class HostServiceCompose implements ServiceCompose {
     
     private HostConfigure configure;
-    
+
+    public HostServiceCompose(HostConfigure configure) {
+        this.configure = configure;
+    }
+
+    /**
+     * get configure.
+     *
+     * @return configure
+     */
+    public HostConfigure getConfigure() {
+        return configure;
+    }
+
     public void start() {
         List<HostServiceConfigure> configures = Lists.newArrayList(configure.getExternalServices());
         if (Objects.nonNull(configure.getAdmin())) {
diff --git a/shenyu-e2e/shenyu-e2e-engine/src/main/java/org/apache/shenyu/e2e/engine/service/NamingResolver.java b/shenyu-e2e/shenyu-e2e-engine/src/main/java/org/apache/shenyu/e2e/engine/service/NamingResolver.java
index a12579fe3..b5a1e85dd 100644
--- a/shenyu-e2e/shenyu-e2e-engine/src/main/java/org/apache/shenyu/e2e/engine/service/NamingResolver.java
+++ b/shenyu-e2e/shenyu-e2e-engine/src/main/java/org/apache/shenyu/e2e/engine/service/NamingResolver.java
@@ -20,8 +20,9 @@ package org.apache.shenyu.e2e.engine.service;
 import com.google.common.base.Strings;
 import com.google.common.collect.ImmutableMap;
 import com.google.common.collect.Maps;
-import lombok.extern.slf4j.Slf4j;
 import org.apache.shenyu.e2e.engine.config.ShenYuEngineConfigure.HostConfigure.HostServiceConfigure;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.testcontainers.containers.DockerComposeContainer;
 
 import java.lang.reflect.Field;
@@ -32,9 +33,13 @@ import java.util.Map;
 import java.util.Objects;
 import java.util.stream.Collectors;
 
-@Slf4j
+/**
+ * Resolve name.
+ */
 public enum NamingResolver {
     INSTANCE;
+
+    private static final Logger log = LoggerFactory.getLogger(NamingResolver.class);
     
     private Map<String, String> namingMap;
     
diff --git a/shenyu-e2e/shenyu-e2e-engine/src/main/java/org/apache/shenyu/e2e/engine/service/WaitingForStrategies.java b/shenyu-e2e/shenyu-e2e-engine/src/main/java/org/apache/shenyu/e2e/engine/service/WaitingForStrategies.java
index f6cd9e080..c3630c7b8 100644
--- a/shenyu-e2e/shenyu-e2e-engine/src/main/java/org/apache/shenyu/e2e/engine/service/WaitingForStrategies.java
+++ b/shenyu-e2e/shenyu-e2e-engine/src/main/java/org/apache/shenyu/e2e/engine/service/WaitingForStrategies.java
@@ -22,14 +22,21 @@ import org.testcontainers.containers.wait.strategy.WaitStrategy;
 
 import java.time.Duration;
 
+/**
+ * Perform health checks on Admin and Gateway.
+ */
 public class WaitingForStrategies {
-    
+
+    private static final String GET = "GET";
+
+    private static final String ACTUATOR_HEALTH = "/actuator/health";
+
     public static WaitStrategy newAdminStrategy(int port) {
         return new HttpWaitStrategy()
                 .allowInsecure()
                 .forPort(port)
-                .withMethod("GET")
-                .forPath("/actuator/health")
+                .withMethod(GET)
+                .forPath(ACTUATOR_HEALTH)
                 .forStatusCode(200)
                 .withReadTimeout(Duration.ofSeconds(3))
                 .withStartupTimeout(Duration.ofMinutes(3));
@@ -39,8 +46,8 @@ public class WaitingForStrategies {
         return new HttpWaitStrategy()
                 .allowInsecure()
                 .forPort(port)
-                .withMethod("GET")
-                .forPath("/actuator/health")
+                .withMethod(GET)
+                .forPath(ACTUATOR_HEALTH)
                 .forStatusCode(200)
                 .withReadTimeout(Duration.ofSeconds(3))
                 .withStartupTimeout(Duration.ofMinutes(3));
diff --git a/shenyu-e2e/shenyu-e2e-engine/src/main/java/org/apache/shenyu/e2e/engine/service/docker/DockerComposeFile.java b/shenyu-e2e/shenyu-e2e-engine/src/main/java/org/apache/shenyu/e2e/engine/service/docker/DockerComposeFile.java
index c228da1eb..ba0885f5a 100644
--- a/shenyu-e2e/shenyu-e2e-engine/src/main/java/org/apache/shenyu/e2e/engine/service/docker/DockerComposeFile.java
+++ b/shenyu-e2e/shenyu-e2e-engine/src/main/java/org/apache/shenyu/e2e/engine/service/docker/DockerComposeFile.java
@@ -17,7 +17,6 @@
 
 package org.apache.shenyu.e2e.engine.service.docker;
 
-import lombok.Getter;
 import org.junit.jupiter.api.Assertions;
 import org.junit.jupiter.api.Assumptions;
 import org.springframework.util.ResourceUtils;
@@ -33,12 +32,30 @@ import java.util.Map;
 import java.util.Objects;
 
 public class DockerComposeFile {
-    @Getter
+
     private final List<String> services;
     
-    @Getter
+
     private final File file;
-    
+
+    /**
+     * get services.
+     *
+     * @return services
+     */
+    public List<String> getServices() {
+        return services;
+    }
+
+    /**
+     * get file.
+     *
+     * @return file
+     */
+    public File getFile() {
+        return file;
+    }
+
     DockerComposeFile(List<String> services, File file) {
         this.services = services;
         this.file = file;
diff --git a/shenyu-e2e/shenyu-e2e-engine/src/main/java/org/apache/shenyu/e2e/engine/service/docker/ShenYuLogConsumer.java b/shenyu-e2e/shenyu-e2e-engine/src/main/java/org/apache/shenyu/e2e/engine/service/docker/ShenYuLogConsumer.java
index c4e075ffd..ca8be49c4 100644
--- a/shenyu-e2e/shenyu-e2e-engine/src/main/java/org/apache/shenyu/e2e/engine/service/docker/ShenYuLogConsumer.java
+++ b/shenyu-e2e/shenyu-e2e-engine/src/main/java/org/apache/shenyu/e2e/engine/service/docker/ShenYuLogConsumer.java
@@ -17,11 +17,16 @@
 
 package org.apache.shenyu.e2e.engine.service.docker;
 
-import lombok.extern.slf4j.Slf4j;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.testcontainers.containers.output.Slf4jLogConsumer;
 
-@Slf4j(topic = "docker-compose")
+/**
+ * ShenYu-Log Consumer.
+ */
 public class ShenYuLogConsumer extends Slf4jLogConsumer {
+
+    private static final Logger log = LoggerFactory.getLogger("docker-compose");
     
     public ShenYuLogConsumer(String serviceName) {
         super(log);
diff --git a/shenyu-e2e/shenyu-e2e-engine/src/test/java/org/apache/shenyu/e2e/engine/ShenYuEngineTest.java b/shenyu-e2e/shenyu-e2e-engine/src/test/java/org/apache/shenyu/e2e/engine/ShenYuEngineTest.java
index 43eb1e90a..cae7b9ee8 100644
--- a/shenyu-e2e/shenyu-e2e-engine/src/test/java/org/apache/shenyu/e2e/engine/ShenYuEngineTest.java
+++ b/shenyu-e2e/shenyu-e2e-engine/src/test/java/org/apache/shenyu/e2e/engine/ShenYuEngineTest.java
@@ -19,7 +19,7 @@ package org.apache.shenyu.e2e.engine;
 
 import com.fasterxml.jackson.core.JsonProcessingException;
 import org.apache.shenyu.e2e.client.admin.AdminClient;
-import org.apache.shenyu.e2e.client.admin.model.data.SearchCondition.SelectorQueryCondition;
+import org.apache.shenyu.e2e.client.admin.model.data.SelectorQueryCondition;
 import org.apache.shenyu.e2e.client.admin.model.response.SearchedResources;
 import org.apache.shenyu.e2e.client.admin.model.response.SelectorDTO;
 import org.apache.shenyu.e2e.engine.annotation.ShenYuTest;