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