mirror of
				https://github.com/dromara/RuoYi-Vue-Plus.git
				synced 2025-11-04 16:23:42 +08:00 
			
		
		
		
	修复字典导出序列化报错问题
This commit is contained in:
		@@ -2,6 +2,7 @@ package com.ruoyi.common.utils;
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
import java.util.Collection;
 | 
					import java.util.Collection;
 | 
				
			||||||
import java.util.List;
 | 
					import java.util.List;
 | 
				
			||||||
 | 
					import com.alibaba.fastjson2.JSONArray;
 | 
				
			||||||
import com.ruoyi.common.constant.Constants;
 | 
					import com.ruoyi.common.constant.Constants;
 | 
				
			||||||
import com.ruoyi.common.core.domain.entity.SysDictData;
 | 
					import com.ruoyi.common.core.domain.entity.SysDictData;
 | 
				
			||||||
import com.ruoyi.common.core.redis.RedisCache;
 | 
					import com.ruoyi.common.core.redis.RedisCache;
 | 
				
			||||||
@@ -38,10 +39,10 @@ public class DictUtils
 | 
				
			|||||||
     */
 | 
					     */
 | 
				
			||||||
    public static List<SysDictData> getDictCache(String key)
 | 
					    public static List<SysDictData> getDictCache(String key)
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        Object cacheObj = SpringUtils.getBean(RedisCache.class).getCacheObject(getCacheKey(key));
 | 
					        JSONArray arrayCache = SpringUtils.getBean(RedisCache.class).getCacheObject(getCacheKey(key));
 | 
				
			||||||
        if (StringUtils.isNotNull(cacheObj))
 | 
					        if (StringUtils.isNotNull(arrayCache))
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            return StringUtils.cast(cacheObj);
 | 
					            return arrayCache.toList(SysDictData.class);
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
        return null;
 | 
					        return null;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
@@ -83,27 +84,30 @@ public class DictUtils
 | 
				
			|||||||
        StringBuilder propertyString = new StringBuilder();
 | 
					        StringBuilder propertyString = new StringBuilder();
 | 
				
			||||||
        List<SysDictData> datas = getDictCache(dictType);
 | 
					        List<SysDictData> datas = getDictCache(dictType);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        if (StringUtils.containsAny(separator, dictValue) && StringUtils.isNotEmpty(datas))
 | 
					        if (StringUtils.isNotNull(datas))
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            for (SysDictData dict : datas)
 | 
					            if (StringUtils.containsAny(separator, dictValue))
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
                for (String value : dictValue.split(separator))
 | 
					                for (SysDictData dict : datas)
 | 
				
			||||||
                {
 | 
					                {
 | 
				
			||||||
                    if (value.equals(dict.getDictValue()))
 | 
					                    for (String value : dictValue.split(separator))
 | 
				
			||||||
                    {
 | 
					                    {
 | 
				
			||||||
                        propertyString.append(dict.getDictLabel()).append(separator);
 | 
					                        if (value.equals(dict.getDictValue()))
 | 
				
			||||||
                        break;
 | 
					                        {
 | 
				
			||||||
 | 
					                            propertyString.append(dict.getDictLabel()).append(separator);
 | 
				
			||||||
 | 
					                            break;
 | 
				
			||||||
 | 
					                        }
 | 
				
			||||||
                    }
 | 
					                    }
 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
        }
 | 
					            else
 | 
				
			||||||
        else
 | 
					 | 
				
			||||||
        {
 | 
					 | 
				
			||||||
            for (SysDictData dict : datas)
 | 
					 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
                if (dictValue.equals(dict.getDictValue()))
 | 
					                for (SysDictData dict : datas)
 | 
				
			||||||
                {
 | 
					                {
 | 
				
			||||||
                    return dict.getDictLabel();
 | 
					                    if (dictValue.equals(dict.getDictValue()))
 | 
				
			||||||
 | 
					                    {
 | 
				
			||||||
 | 
					                        return dict.getDictLabel();
 | 
				
			||||||
 | 
					                    }
 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -3,13 +3,9 @@ package com.ruoyi.framework.config;
 | 
				
			|||||||
import java.nio.charset.Charset;
 | 
					import java.nio.charset.Charset;
 | 
				
			||||||
import org.springframework.data.redis.serializer.RedisSerializer;
 | 
					import org.springframework.data.redis.serializer.RedisSerializer;
 | 
				
			||||||
import org.springframework.data.redis.serializer.SerializationException;
 | 
					import org.springframework.data.redis.serializer.SerializationException;
 | 
				
			||||||
import org.springframework.util.Assert;
 | 
					 | 
				
			||||||
import com.alibaba.fastjson2.JSON;
 | 
					import com.alibaba.fastjson2.JSON;
 | 
				
			||||||
import com.alibaba.fastjson2.JSONReader;
 | 
					import com.alibaba.fastjson2.JSONReader;
 | 
				
			||||||
import com.alibaba.fastjson2.JSONWriter;
 | 
					import com.alibaba.fastjson2.JSONWriter;
 | 
				
			||||||
import com.fasterxml.jackson.databind.JavaType;
 | 
					 | 
				
			||||||
import com.fasterxml.jackson.databind.ObjectMapper;
 | 
					 | 
				
			||||||
import com.fasterxml.jackson.databind.type.TypeFactory;
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
/**
 | 
					/**
 | 
				
			||||||
 * Redis使用FastJson序列化
 | 
					 * Redis使用FastJson序列化
 | 
				
			||||||
@@ -18,9 +14,6 @@ import com.fasterxml.jackson.databind.type.TypeFactory;
 | 
				
			|||||||
 */
 | 
					 */
 | 
				
			||||||
public class FastJson2JsonRedisSerializer<T> implements RedisSerializer<T>
 | 
					public class FastJson2JsonRedisSerializer<T> implements RedisSerializer<T>
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    @SuppressWarnings("unused")
 | 
					 | 
				
			||||||
    private ObjectMapper objectMapper = new ObjectMapper();
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    public static final Charset DEFAULT_CHARSET = Charset.forName("UTF-8");
 | 
					    public static final Charset DEFAULT_CHARSET = Charset.forName("UTF-8");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    private Class<T> clazz;
 | 
					    private Class<T> clazz;
 | 
				
			||||||
@@ -52,15 +45,4 @@ public class FastJson2JsonRedisSerializer<T> implements RedisSerializer<T>
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
        return JSON.parseObject(str, clazz, JSONReader.Feature.SupportAutoType);
 | 
					        return JSON.parseObject(str, clazz, JSONReader.Feature.SupportAutoType);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					 | 
				
			||||||
    public void setObjectMapper(ObjectMapper objectMapper)
 | 
					 | 
				
			||||||
    {
 | 
					 | 
				
			||||||
        Assert.notNull(objectMapper, "'objectMapper' must not be null");
 | 
					 | 
				
			||||||
        this.objectMapper = objectMapper;
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    protected JavaType getJavaType(Class<?> clazz)
 | 
					 | 
				
			||||||
    {
 | 
					 | 
				
			||||||
        return TypeFactory.defaultInstance().constructType(clazz);
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -8,11 +8,6 @@ import org.springframework.data.redis.connection.RedisConnectionFactory;
 | 
				
			|||||||
import org.springframework.data.redis.core.RedisTemplate;
 | 
					import org.springframework.data.redis.core.RedisTemplate;
 | 
				
			||||||
import org.springframework.data.redis.core.script.DefaultRedisScript;
 | 
					import org.springframework.data.redis.core.script.DefaultRedisScript;
 | 
				
			||||||
import org.springframework.data.redis.serializer.StringRedisSerializer;
 | 
					import org.springframework.data.redis.serializer.StringRedisSerializer;
 | 
				
			||||||
import com.fasterxml.jackson.annotation.JsonAutoDetect;
 | 
					 | 
				
			||||||
import com.fasterxml.jackson.annotation.JsonTypeInfo;
 | 
					 | 
				
			||||||
import com.fasterxml.jackson.annotation.PropertyAccessor;
 | 
					 | 
				
			||||||
import com.fasterxml.jackson.databind.ObjectMapper;
 | 
					 | 
				
			||||||
import com.fasterxml.jackson.databind.jsontype.impl.LaissezFaireSubTypeValidator;
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
/**
 | 
					/**
 | 
				
			||||||
 * redis配置
 | 
					 * redis配置
 | 
				
			||||||
@@ -32,11 +27,6 @@ public class RedisConfig extends CachingConfigurerSupport
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
        FastJson2JsonRedisSerializer serializer = new FastJson2JsonRedisSerializer(Object.class);
 | 
					        FastJson2JsonRedisSerializer serializer = new FastJson2JsonRedisSerializer(Object.class);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        ObjectMapper mapper = new ObjectMapper();
 | 
					 | 
				
			||||||
        mapper.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
 | 
					 | 
				
			||||||
        mapper.activateDefaultTyping(LaissezFaireSubTypeValidator.instance, ObjectMapper.DefaultTyping.NON_FINAL, JsonTypeInfo.As.PROPERTY);
 | 
					 | 
				
			||||||
        serializer.setObjectMapper(mapper);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        // 使用StringRedisSerializer来序列化和反序列化redis的key值
 | 
					        // 使用StringRedisSerializer来序列化和反序列化redis的key值
 | 
				
			||||||
        template.setKeySerializer(new StringRedisSerializer());
 | 
					        template.setKeySerializer(new StringRedisSerializer());
 | 
				
			||||||
        template.setValueSerializer(serializer);
 | 
					        template.setValueSerializer(serializer);
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -11,7 +11,7 @@ import DictOptions from './DictOptions'
 | 
				
			|||||||
export default class DictMeta {
 | 
					export default class DictMeta {
 | 
				
			||||||
  constructor(options) {
 | 
					  constructor(options) {
 | 
				
			||||||
    this.type = options.type
 | 
					    this.type = options.type
 | 
				
			||||||
    this.request = options.request,
 | 
					    this.request = options.request
 | 
				
			||||||
    this.responseConverter = options.responseConverter
 | 
					    this.responseConverter = options.responseConverter
 | 
				
			||||||
    this.labelField = options.labelField
 | 
					    this.labelField = options.labelField
 | 
				
			||||||
    this.valueField = options.valueField
 | 
					    this.valueField = options.valueField
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user