Explorar el Código

修复`Redis`模块的`hgetall`命令返回结果不正确的问题

mxd hace 3 años
padre
commit
8c02dcd008

+ 8 - 3
magic-api-plugins/magic-api-plugin-redis/src/main/java/org/ssssssss/magicapi/redis/RedisModule.java

@@ -6,8 +6,7 @@ import org.springframework.data.redis.core.StringRedisTemplate;
 import org.ssssssss.magicapi.core.config.MagicModule;
 import org.ssssssss.script.functions.DynamicMethod;
 
-import java.util.ArrayList;
-import java.util.List;
+import java.util.*;
 
 /**
  * redis模块
@@ -40,13 +39,13 @@ public class RedisModule implements MagicModule, DynamicMethod {
 	/**
 	 * 反序列化
 	 */
+	@SuppressWarnings("unchecked")
 	private Object deserialize(Object value) {
 		if (value != null) {
 			if (value instanceof byte[]) {
 				return this.redisTemplate.getStringSerializer().deserialize((byte[]) value);
 			}
 			if (value instanceof List) {
-				@SuppressWarnings("unchecked")
 				List<Object> valueList = (List<Object>) value;
 				List<Object> resultList = new ArrayList<>(valueList.size());
 				for (Object val : valueList) {
@@ -54,6 +53,12 @@ public class RedisModule implements MagicModule, DynamicMethod {
 				}
 				return resultList;
 			}
+			if(value instanceof Map){
+				Map<Object, Object> map = (Map<Object, Object>) value;
+				LinkedHashMap<Object, Object> newMap = new LinkedHashMap<>(map.size());
+				map.forEach((key, val) -> newMap.put(deserialize(key), deserialize(val)));
+				return newMap;
+			}
 		}
 		return value;
 	}