|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+package com.ruoyi.framework.config;
|
|
|
2
|
+
|
|
|
3
|
+import static org.junit.jupiter.api.Assertions.assertDoesNotThrow;
|
|
|
4
|
+import static org.junit.jupiter.api.Assertions.assertFalse;
|
|
|
5
|
+import static org.junit.jupiter.api.Assertions.assertNotNull;
|
|
|
6
|
+import static org.junit.jupiter.api.Assertions.assertTrue;
|
|
|
7
|
+
|
|
|
8
|
+import java.util.Collections;
|
|
|
9
|
+import java.util.List;
|
|
|
10
|
+
|
|
|
11
|
+import org.junit.jupiter.api.DisplayName;
|
|
|
12
|
+import org.junit.jupiter.api.Test;
|
|
|
13
|
+
|
|
|
14
|
+import com.alibaba.fastjson2.JSONArray;
|
|
|
15
|
+import com.ruoyi.common.core.domain.entity.SysDictData;
|
|
|
16
|
+
|
|
|
17
|
+/**
|
|
|
18
|
+ * 复现 sys_normal_disable 字典 Redis 缓存 Fastjson2 反序列化失败。
|
|
|
19
|
+ */
|
|
|
20
|
+@DisplayName("SysDictData Redis 序列化")
|
|
|
21
|
+class SysDictDataRedisSerializerTest
|
|
|
22
|
+{
|
|
|
23
|
+ @Test
|
|
|
24
|
+ @DisplayName("Object.class 序列化字典列表不含 default 布尔字段")
|
|
|
25
|
+ void dictListRoundTripAsObjectClass()
|
|
|
26
|
+ {
|
|
|
27
|
+ SysDictData row = new SysDictData();
|
|
|
28
|
+ row.setDictCode(1L);
|
|
|
29
|
+ row.setDictSort(1L);
|
|
|
30
|
+ row.setDictLabel("正常");
|
|
|
31
|
+ row.setDictValue("0");
|
|
|
32
|
+ row.setDictType("sys_normal_disable");
|
|
|
33
|
+ row.setListClass("primary");
|
|
|
34
|
+ row.setIsDefault("Y");
|
|
|
35
|
+ row.setStatus("0");
|
|
|
36
|
+ List<SysDictData> list = Collections.singletonList(row);
|
|
|
37
|
+
|
|
|
38
|
+ FastJson2JsonRedisSerializer<Object> serializer = new FastJson2JsonRedisSerializer<>(Object.class);
|
|
|
39
|
+ byte[] bytes = serializer.serialize(list);
|
|
|
40
|
+ String json = new String(bytes, FastJson2JsonRedisSerializer.DEFAULT_CHARSET);
|
|
|
41
|
+ assertFalse(json.contains("\"default\":"), () -> "不应序列化 getDefault() 为 default 字段:" + json);
|
|
|
42
|
+
|
|
|
43
|
+ Object raw = assertDoesNotThrow(() -> serializer.deserialize(bytes));
|
|
|
44
|
+ assertNotNull(raw);
|
|
|
45
|
+ JSONArray array = (JSONArray) raw;
|
|
|
46
|
+ assertTrue(array.size() > 0);
|
|
|
47
|
+ SysDictData restored = array.getObject(0, SysDictData.class);
|
|
|
48
|
+ assertNotNull(restored);
|
|
|
49
|
+ assertTrue("正常".equals(restored.getDictLabel()));
|
|
|
50
|
+ }
|
|
|
51
|
+
|
|
|
52
|
+ @Test
|
|
|
53
|
+ @DisplayName("兼容含 legacy default:false 的历史缓存")
|
|
|
54
|
+ void deserializeLegacyDictCacheWithDefaultField()
|
|
|
55
|
+ {
|
|
|
56
|
+ String legacyJson =
|
|
|
57
|
+ "[{\"@type\":\"com.ruoyi.common.core.domain.entity.SysDictData\",\"dictCode\":1,"
|
|
|
58
|
+ + "\"dictLabel\":\"正常\",\"dictValue\":\"0\",\"dictType\":\"sys_normal_disable\","
|
|
|
59
|
+ + "\"isDefault\":\"Y\",\"default\":false,\"listClass\":\"primary\",\"status\":\"0\"}]";
|
|
|
60
|
+ FastJson2JsonRedisSerializer<Object> serializer = new FastJson2JsonRedisSerializer<>(Object.class);
|
|
|
61
|
+ Object raw = assertDoesNotThrow(
|
|
|
62
|
+ () -> serializer.deserialize(legacyJson.getBytes(FastJson2JsonRedisSerializer.DEFAULT_CHARSET)));
|
|
|
63
|
+ assertNotNull(raw);
|
|
|
64
|
+ }
|
|
|
65
|
+}
|