diff --git a/util/src/test/java/MainTest.java b/boot/src/test/java/com/zfoo/boot/MainTest.java
similarity index 96%
rename from util/src/test/java/MainTest.java
rename to boot/src/test/java/com/zfoo/boot/MainTest.java
index 5229da0a..c03d5538 100644
--- a/util/src/test/java/MainTest.java
+++ b/boot/src/test/java/com/zfoo/boot/MainTest.java
@@ -1,6 +1,5 @@
/*
* Copyright (C) 2020 The zfoo Authors
- *
* Licensed 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
*
@@ -11,15 +10,15 @@
* See the License for the specific language governing permissions and limitations under the License.
*/
+package com.zfoo.boot;
+
import com.zfoo.protocol.util.StringUtils;
-import org.junit.Ignore;
import org.junit.Test;
/**
* @author godotg
* @version 3.0
*/
-@Ignore
public class MainTest {
@Test
diff --git a/boot/src/test/resources/logback-test.xml b/boot/src/test/resources/logback-test.xml
new file mode 100644
index 00000000..bd04607e
--- /dev/null
+++ b/boot/src/test/resources/logback-test.xml
@@ -0,0 +1,44 @@
+
+
+
+
+ com.zfoo.boot
+
+
+
+
+
+
+
+ ${PATTERN_CONSOLE}
+ UTF-8
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/storage/src/main/java/com/zfoo/storage/interpreter/ResourceInterpreter.java b/storage/src/main/java/com/zfoo/storage/interpreter/ResourceInterpreter.java
index 10a83200..a5f1190d 100644
--- a/storage/src/main/java/com/zfoo/storage/interpreter/ResourceInterpreter.java
+++ b/storage/src/main/java/com/zfoo/storage/interpreter/ResourceInterpreter.java
@@ -41,6 +41,7 @@ public class ResourceInterpreter {
static {
var converters = new HashSet<>();
converters.add(new JsonToArrayConverter());
+ converters.add(new JsonToListConverter());
converters.add(new JsonToMapConverter());
converters.add(new JsonToObjectConverter());
converters.add(new StringToClassConverter());
diff --git a/storage/src/main/java/com/zfoo/storage/manager/StorageManager.java b/storage/src/main/java/com/zfoo/storage/manager/StorageManager.java
index 420251c1..e0b05c7b 100644
--- a/storage/src/main/java/com/zfoo/storage/manager/StorageManager.java
+++ b/storage/src/main/java/com/zfoo/storage/manager/StorageManager.java
@@ -16,6 +16,7 @@ package com.zfoo.storage.manager;
import com.zfoo.protocol.collection.CollectionUtils;
import com.zfoo.protocol.exception.ExceptionUtils;
import com.zfoo.protocol.exception.RunException;
+import com.zfoo.protocol.util.ClassUtils;
import com.zfoo.protocol.util.FileUtils;
import com.zfoo.protocol.util.ReflectionUtils;
import com.zfoo.protocol.util.StringUtils;
@@ -95,8 +96,9 @@ public class StorageManager implements IStorageManager {
// 检查class字段是否合法
if (!storageConfig.isWriteable()) {
- for (var definition : resourceDefinitionMap.values()) {
- var clazz = definition.getClazz();
+ var allRelevantClass = new HashSet>();
+ resourceDefinitionMap.values().forEach(it -> allRelevantClass.addAll(ClassUtils.relevantClass(it.getClazz())));
+ for (var clazz : allRelevantClass) {
var fieldList = ReflectionUtils.notStaticAndTransientFields(clazz);
for (var field : fieldList) {
if (Modifier.isPublic(field.getModifiers())) {
diff --git a/storage/src/main/java/com/zfoo/storage/strategy/JsonToListConverter.java b/storage/src/main/java/com/zfoo/storage/strategy/JsonToListConverter.java
new file mode 100644
index 00000000..3e9eeb28
--- /dev/null
+++ b/storage/src/main/java/com/zfoo/storage/strategy/JsonToListConverter.java
@@ -0,0 +1,54 @@
+/*
+ * Copyright (C) 2020 The zfoo Authors
+ *
+ * Licensed 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 com.zfoo.storage.strategy;
+
+import com.zfoo.protocol.util.JsonUtils;
+import org.springframework.core.convert.TypeDescriptor;
+import org.springframework.core.convert.converter.ConditionalGenericConverter;
+
+import java.util.Collections;
+import java.util.List;
+import java.util.Set;
+
+/**
+ * @author liqi
+ * @version 4.0
+ */
+public class JsonToListConverter implements ConditionalGenericConverter {
+
+
+ @Override
+ public boolean matches(TypeDescriptor sourceType, TypeDescriptor targetType) {
+ return sourceType.getType() == String.class && List.class.isAssignableFrom(targetType.getType());
+ }
+
+ @Override
+ public Set getConvertibleTypes() {
+ return Collections.singleton(new ConvertiblePair(String.class, List.class));
+ }
+
+ @Override
+ public Object convert(Object source, TypeDescriptor sourceType, TypeDescriptor targetType) {
+ // String content = (String) source;
+ // return targetType.isPrimitive() ? JsonUtil.string2Object(content, targetType.getObjectType())
+ // : JsonUtil.string2Array(content, targetType.getType());
+ Class> clazz = null;
+
+ String content = (String) source;
+ for (var v : targetType.getResolvableType().getGenerics()){
+ clazz = (Class>) v.getType();
+ }
+ return Collections.unmodifiableList(JsonUtils.string2List(content, clazz));
+ }
+}
diff --git a/storage/src/test/java/com/zfoo/storage/resource/StudentResource.java b/storage/src/test/java/com/zfoo/storage/resource/StudentResource.java
index 303a3a77..fcc5db35 100644
--- a/storage/src/test/java/com/zfoo/storage/resource/StudentResource.java
+++ b/storage/src/test/java/com/zfoo/storage/resource/StudentResource.java
@@ -17,6 +17,8 @@ import com.zfoo.storage.model.anno.Id;
import com.zfoo.storage.model.anno.Index;
import com.zfoo.storage.model.anno.Resource;
+import java.util.List;
+
/**
* @author godotg
* @version 4.0
@@ -37,6 +39,7 @@ public class StudentResource {
private float score;
private String[] courses;
private User[] users;
+ private List userList;
private User user;
/**
@@ -68,6 +71,10 @@ public class StudentResource {
return users;
}
+ public List getUserList() {
+ return userList;
+ }
+
public User getUser() {
return user;
}
diff --git a/storage/src/test/resources/excel/StudentResource.xlsx b/storage/src/test/resources/excel/StudentResource.xlsx
index d7378b7a..c0a744a4 100644
Binary files a/storage/src/test/resources/excel/StudentResource.xlsx and b/storage/src/test/resources/excel/StudentResource.xlsx differ