diff --git a/kernel-d-scanner/scanner-api/pom.xml b/kernel-d-scanner/scanner-api/pom.xml
index 32c4519aa..17f1f4279 100644
--- a/kernel-d-scanner/scanner-api/pom.xml
+++ b/kernel-d-scanner/scanner-api/pom.xml
@@ -37,6 +37,18 @@
provided
+
+
+ org.springframework.boot
+ spring-boot-starter-test
+ test
+
+
+ org.springframework.boot
+ spring-boot-starter-validation
+ test
+
+
diff --git a/kernel-d-scanner/scanner-api/src/test/java/cn/stylefeng/roses/kernel/scanner/api/TestArray.java b/kernel-d-scanner/scanner-api/src/test/java/cn/stylefeng/roses/kernel/scanner/api/TestArray.java
new file mode 100644
index 000000000..7683fe4d9
--- /dev/null
+++ b/kernel-d-scanner/scanner-api/src/test/java/cn/stylefeng/roses/kernel/scanner/api/TestArray.java
@@ -0,0 +1,81 @@
+package cn.stylefeng.roses.kernel.scanner.api;
+
+import cn.hutool.core.collection.ListUtil;
+import cn.hutool.core.lang.TypeReference;
+import cn.hutool.core.util.IdUtil;
+import cn.stylefeng.roses.kernel.rule.pojo.response.ResponseData;
+import cn.stylefeng.roses.kernel.scanner.api.factory.ClassMetaFactory;
+import cn.stylefeng.roses.kernel.scanner.api.pojo.SimpleObject;
+import cn.stylefeng.roses.kernel.scanner.api.pojo.resource.FieldMetadata;
+import cn.stylefeng.roses.kernel.scanner.api.util.AdvancedClassTypeUtil;
+import com.alibaba.fastjson2.JSON;
+import com.alibaba.fastjson2.JSONWriter;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+
+import java.lang.reflect.Type;
+import java.util.List;
+import java.util.Set;
+
+/**
+ * 测试
+ *
+ * @author fengshuonan
+ * @since 2024/8/7 14:25
+ */
+public class TestArray {
+
+ @BeforeEach
+ public void setUp() {
+ AdvancedClassTypeUtil.TEMP_SCAN_PACKAGE_LIST = ListUtil.of("cn.stylefeng");
+ }
+
+ @Test
+ public void testSimpleArray() {
+ Type type = new TypeReference>() {
+ }.getType();
+
+ FieldMetadata fieldMetadata = ClassMetaFactory.beginCreateFieldMetadata(type, IdUtil.fastSimpleUUID());
+
+ String jsonString = JSON.toJSONString(fieldMetadata, JSONWriter.Feature.PrettyFormat);
+
+ System.out.println(jsonString);
+ }
+
+ @Test
+ public void testObjectArray() {
+ Type type = new TypeReference>() {
+ }.getType();
+
+ FieldMetadata fieldMetadata = ClassMetaFactory.beginCreateFieldMetadata(type, IdUtil.fastSimpleUUID());
+
+ String jsonString = JSON.toJSONString(fieldMetadata, JSONWriter.Feature.PrettyFormat);
+
+ System.out.println(jsonString);
+ }
+
+ @Test
+ public void testGenArray() {
+ Type type = new TypeReference>>() {
+ }.getType();
+
+ FieldMetadata fieldMetadata = ClassMetaFactory.beginCreateFieldMetadata(type, IdUtil.fastSimpleUUID());
+
+ String jsonString = JSON.toJSONString(fieldMetadata, JSONWriter.Feature.PrettyFormat);
+
+ System.out.println(jsonString);
+ }
+
+ @Test
+ public void testMultiArray() {
+ Type type = new TypeReference>>>() {
+ }.getType();
+
+ FieldMetadata fieldMetadata = ClassMetaFactory.beginCreateFieldMetadata(type, IdUtil.fastSimpleUUID());
+
+ String jsonString = JSON.toJSONString(fieldMetadata, JSONWriter.Feature.PrettyFormat);
+
+ System.out.println(jsonString);
+ }
+
+}
diff --git a/kernel-d-scanner/scanner-api/src/test/java/cn/stylefeng/roses/kernel/scanner/api/pojo/CircularObject.java b/kernel-d-scanner/scanner-api/src/test/java/cn/stylefeng/roses/kernel/scanner/api/pojo/CircularObject.java
new file mode 100644
index 000000000..b6ce666a5
--- /dev/null
+++ b/kernel-d-scanner/scanner-api/src/test/java/cn/stylefeng/roses/kernel/scanner/api/pojo/CircularObject.java
@@ -0,0 +1,56 @@
+package cn.stylefeng.roses.kernel.scanner.api.pojo;
+
+import cn.stylefeng.roses.kernel.rule.annotation.ChineseDescription;
+import jakarta.validation.constraints.NotEmpty;
+import jakarta.validation.constraints.NotNull;
+import lombok.Data;
+
+import java.math.BigDecimal;
+import java.util.List;
+
+/**
+ * 递归调用的测试
+ *
+ * @author fengshuonan
+ * @since 2024/8/5 15:28
+ */
+@Data
+public class CircularObject {
+
+ /**
+ * 用户id
+ */
+ @ChineseDescription("用户id")
+ @NotNull(message = "用户id不能为空")
+ private Long userId;
+
+ /**
+ * 用户名
+ */
+ @ChineseDescription("用户名")
+ @NotEmpty(message = "用户名不能为空")
+ private String userName;
+
+ /**
+ * 年龄
+ */
+ @ChineseDescription("年龄")
+ @NotNull(message = "年龄不能为空")
+ private Integer age;
+
+ /**
+ * 用户分数
+ */
+ @ChineseDescription("用户分数")
+ @NotNull(message = "用户分数不能为空")
+ private BigDecimal userScore;
+
+ /**
+ * 递归列表
+ */
+ @ChineseDescription("递归列表")
+ @NotEmpty(message = "递归列表")
+ private List circularObjectList;
+
+
+}
diff --git a/kernel-d-scanner/scanner-api/src/test/java/cn/stylefeng/roses/kernel/scanner/api/pojo/ExtendsSimpleObject.java b/kernel-d-scanner/scanner-api/src/test/java/cn/stylefeng/roses/kernel/scanner/api/pojo/ExtendsSimpleObject.java
new file mode 100644
index 000000000..d30e7a8a4
--- /dev/null
+++ b/kernel-d-scanner/scanner-api/src/test/java/cn/stylefeng/roses/kernel/scanner/api/pojo/ExtendsSimpleObject.java
@@ -0,0 +1,31 @@
+package cn.stylefeng.roses.kernel.scanner.api.pojo;
+
+import cn.stylefeng.roses.kernel.rule.annotation.ChineseDescription;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import java.util.List;
+
+/**
+ * 我的请求类
+ *
+ * @author fengshuonan
+ * @since 2024/8/4 15:53
+ */
+@EqualsAndHashCode(callSuper = true)
+@Data
+public class ExtendsSimpleObject extends SimpleObject {
+
+ /**
+ * 单位地址
+ */
+ @ChineseDescription("单位地址")
+ private String companyAddress;
+
+ /**
+ * 工作项列表
+ */
+ @ChineseDescription("工作项列表")
+ private List workItemList;
+
+}
diff --git a/kernel-d-scanner/scanner-api/src/test/java/cn/stylefeng/roses/kernel/scanner/api/pojo/MyRequest.java b/kernel-d-scanner/scanner-api/src/test/java/cn/stylefeng/roses/kernel/scanner/api/pojo/MyRequest.java
new file mode 100644
index 000000000..9674cfc15
--- /dev/null
+++ b/kernel-d-scanner/scanner-api/src/test/java/cn/stylefeng/roses/kernel/scanner/api/pojo/MyRequest.java
@@ -0,0 +1,57 @@
+package cn.stylefeng.roses.kernel.scanner.api.pojo;
+
+import cn.stylefeng.roses.kernel.rule.annotation.ChineseDescription;
+import cn.stylefeng.roses.kernel.rule.pojo.request.BaseRequest;
+import jakarta.validation.constraints.NotEmpty;
+import jakarta.validation.constraints.NotNull;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import java.math.BigDecimal;
+import java.util.List;
+
+/**
+ * 一个基本的对象
+ *
+ * @author fengshuonan
+ * @since 2024/8/5 10:32
+ */
+@EqualsAndHashCode(callSuper = true)
+@Data
+public class MyRequest extends BaseRequest {
+
+ /**
+ * 用户id
+ */
+ @ChineseDescription("用户id")
+ @NotNull(message = "用户id不能为空", groups = add.class)
+ private Long userId;
+
+ /**
+ * 用户名
+ */
+ @ChineseDescription("用户名")
+ @NotEmpty(message = "用户名不能为空", groups = add.class)
+ private String userName;
+
+ /**
+ * 年龄
+ */
+ @ChineseDescription("年龄")
+ @NotNull(message = "年龄不能为空", groups = edit.class)
+ private Integer age;
+
+ /**
+ * 用户分数
+ */
+ @ChineseDescription("用户分数")
+ @NotNull(message = "用户分数不能为空", groups = edit.class)
+ private BigDecimal userScore;
+
+ /**
+ * 列表
+ */
+ @ChineseDescription("列表")
+ @NotEmpty(message = "列表不能为空", groups = {add.class, edit.class})
+ private List mySimpleList;
+}
diff --git a/kernel-d-scanner/scanner-api/src/test/java/cn/stylefeng/roses/kernel/scanner/api/pojo/SimpleObject.java b/kernel-d-scanner/scanner-api/src/test/java/cn/stylefeng/roses/kernel/scanner/api/pojo/SimpleObject.java
new file mode 100644
index 000000000..3fb650f63
--- /dev/null
+++ b/kernel-d-scanner/scanner-api/src/test/java/cn/stylefeng/roses/kernel/scanner/api/pojo/SimpleObject.java
@@ -0,0 +1,55 @@
+package cn.stylefeng.roses.kernel.scanner.api.pojo;
+
+import cn.stylefeng.roses.kernel.rule.annotation.ChineseDescription;
+import jakarta.validation.constraints.NotEmpty;
+import jakarta.validation.constraints.NotNull;
+import lombok.Data;
+
+import java.math.BigDecimal;
+import java.util.List;
+
+/**
+ * 一个基本的对象
+ *
+ * @author fengshuonan
+ * @since 2024/8/5 10:32
+ */
+@Data
+public class SimpleObject {
+
+ /**
+ * 用户id
+ */
+ @ChineseDescription("用户id")
+ @NotNull(message = "用户id不能为空")
+ private Long userId;
+
+ /**
+ * 用户名
+ */
+ @ChineseDescription("用户名")
+ @NotEmpty(message = "用户名不能为空")
+ private String userName;
+
+ /**
+ * 年龄
+ */
+ @ChineseDescription("年龄")
+ @NotNull(message = "年龄不能为空")
+ private Integer age;
+
+ /**
+ * 用户分数
+ */
+ @ChineseDescription("用户分数")
+ @NotNull(message = "用户分数不能为空")
+ private BigDecimal userScore;
+
+ /**
+ * 列表
+ */
+ @ChineseDescription("列表")
+ @NotEmpty(message = "列表不能为空")
+ private List mySimpleList;
+
+}
diff --git a/kernel-d-scanner/scanner-api/src/test/java/cn/stylefeng/roses/kernel/scanner/api/pojo/WorkItem.java b/kernel-d-scanner/scanner-api/src/test/java/cn/stylefeng/roses/kernel/scanner/api/pojo/WorkItem.java
new file mode 100644
index 000000000..c95238d93
--- /dev/null
+++ b/kernel-d-scanner/scanner-api/src/test/java/cn/stylefeng/roses/kernel/scanner/api/pojo/WorkItem.java
@@ -0,0 +1,27 @@
+package cn.stylefeng.roses.kernel.scanner.api.pojo;
+
+import cn.stylefeng.roses.kernel.rule.annotation.ChineseDescription;
+import lombok.Data;
+
+/**
+ * 工作项
+ *
+ * @author fengshuonan
+ * @since 2024/8/5 10:35
+ */
+@Data
+public class WorkItem {
+
+ /**
+ * 键
+ */
+ @ChineseDescription("键")
+ private String key;
+
+ /**
+ * 值
+ */
+ @ChineseDescription("值")
+ private Object value;
+
+}