修复DictUtils未检查类型转换并补充单元测试

This commit is contained in:
wkc
2026-04-15 15:34:43 +08:00
parent 69e1c47940
commit 164295b6d1
3 changed files with 60 additions and 11 deletions

View File

@@ -1,10 +1,11 @@
package com.ruoyi.common.utils;
import java.util.Collection;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import com.alibaba.fastjson2.JSONArray;
package com.ruoyi.common.utils;
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import com.alibaba.fastjson2.JSONArray;
import com.ruoyi.common.constant.CacheConstants;
import com.ruoyi.common.core.domain.entity.SysDictData;
import com.ruoyi.common.core.redis.RedisCache;
@@ -42,15 +43,25 @@ public class DictUtils
public static List<SysDictData> getDictCache(String key)
{
Object cacheObject = SpringUtils.getBean(RedisCache.class).getCacheObject(getCacheKey(key));
if (cacheObject instanceof List)
{
return (List<SysDictData>) cacheObject;
}
if (cacheObject instanceof JSONArray)
{
JSONArray arrayCache = (JSONArray) cacheObject;
return arrayCache.toList(SysDictData.class);
}
if (cacheObject instanceof List<?>)
{
List<?> listCache = (List<?>) cacheObject;
List<SysDictData> dictDatas = new ArrayList<SysDictData>(listCache.size());
for (Object item : listCache)
{
if (!(item instanceof SysDictData))
{
return null;
}
dictDatas.add((SysDictData) item);
}
return dictDatas;
}
return null;
}

View File

@@ -5,6 +5,7 @@ import static org.junit.jupiter.api.Assertions.assertNotNull;
import java.util.Collections;
import java.util.List;
import com.alibaba.fastjson2.JSONArray;
import com.ruoyi.common.core.cache.InMemoryCacheStore;
import com.ruoyi.common.core.domain.entity.SysDictData;
import com.ruoyi.common.core.redis.RedisCache;
@@ -43,4 +44,23 @@ class DictUtilsTest
assertEquals("正常", dictCache.get(0).getDictLabel());
assertEquals("0", dictCache.get(0).getDictValue());
}
@Test
void shouldReturnDictListWhenCacheStoresJsonArray()
{
DefaultListableBeanFactory beanFactory = new DefaultListableBeanFactory();
RedisCache redisCache = new RedisCache(new InMemoryCacheStore());
beanFactory.registerSingleton("redisCache", redisCache);
ReflectionTestUtils.setField(SpringUtils.class, "beanFactory", beanFactory);
JSONArray jsonArray = JSONArray.parseArray("[{\"dictType\":\"sys_normal_disable\",\"dictLabel\":\"正常\",\"dictValue\":\"0\"}]");
redisCache.setCacheObject(DictUtils.getCacheKey("sys_normal_disable"), jsonArray);
List<SysDictData> dictCache = DictUtils.getDictCache("sys_normal_disable");
assertNotNull(dictCache);
assertEquals(1, dictCache.size());
assertEquals("正常", dictCache.get(0).getDictLabel());
assertEquals("0", dictCache.get(0).getDictValue());
}
}