feat(ConfigManager): 重构配置管理器功能

- 新增 getObject、getMap、getList 等方法,增强配置值获取和转换能力
- 支持 JSON 字符串自动反序列化为指定类型对象
- 优化配置值处理逻辑,提高代码复用性和可维护性
- 移除 ScenicConfigManager 中的冗余方法
This commit is contained in:
2025-09-02 23:49:15 +08:00
parent 3efad90750
commit 982e9180f1
2 changed files with 136 additions and 119 deletions

View File

@@ -1,8 +1,10 @@
package com.ycwl.basic.integration.common.manager;
import com.ycwl.basic.utils.JacksonUtil;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
/**
* 通用配置管理器基类
@@ -268,4 +270,137 @@ public abstract class ConfigManager<T> {
public List<T> getAllConfigs() {
return new ArrayList<>(configs);
}
/**
* 获取原始对象配置值
*/
public Object getObject(String key) {
T config = findConfigByKey(key);
if (config == null) {
return null;
}
return getConfigValue(config);
}
/**
* 获取并转换为指定类型的对象
* 支持JSON字符串自动反序列化
*/
@SuppressWarnings("unchecked")
public <R> R getObject(String key, Class<R> clazz) {
T config = findConfigByKey(key);
if (config == null) {
return null;
}
Object value = getConfigValue(config);
if (value == null) return null;
// 如果类型匹配,直接返回
if (clazz.isInstance(value)) {
return (R) value;
}
// 如果是String类型的JSON,尝试反序列化
if (value instanceof String && !clazz.equals(String.class)) {
try {
return JacksonUtil.parseObject((String) value, clazz);
} catch (Exception e) {
return null;
}
}
// 如果目标是String,直接转换
if (clazz.equals(String.class)) {
return (R) value.toString();
}
// 其他情况尝试JSON转换
try {
String json = JacksonUtil.toJSONString(value);
return JacksonUtil.parseObject(json, clazz);
} catch (Exception e) {
return null;
}
}
/**
* 获取Map类型的配置值
*/
@SuppressWarnings("unchecked")
public Map<String, Object> getMap(String key) {
T config = findConfigByKey(key);
if (config == null) {
return null;
}
Object value = getConfigValue(config);
if (value == null) return null;
if (value instanceof Map) {
return (Map<String, Object>) value;
}
if (value instanceof String) {
try {
return JacksonUtil.parseObject((String) value, Map.class);
} catch (Exception e) {
return null;
}
}
return null;
}
/**
* 获取List类型的配置值
*/
@SuppressWarnings("unchecked")
public List<Object> getList(String key) {
T config = findConfigByKey(key);
if (config == null) {
return null;
}
Object value = getConfigValue(config);
if (value == null) return null;
if (value instanceof List) {
return (List<Object>) value;
}
if (value instanceof String) {
try {
return JacksonUtil.parseObject((String) value, List.class);
} catch (Exception e) {
return null;
}
}
return null;
}
/**
* 获取指定元素类型的List配置值
*/
public <R> List<R> getList(String key, Class<R> elementClass) {
T config = findConfigByKey(key);
if (config == null) {
return null;
}
Object value = getConfigValue(config);
if (value == null) return null;
if (value instanceof String) {
try {
return JacksonUtil.parseArray((String) value, elementClass);
} catch (Exception e) {
return null;
}
}
try {
String json = JacksonUtil.toJSONString(value);
return JacksonUtil.parseArray(json, elementClass);
} catch (Exception e) {
return null;
}
}
}

View File

@@ -55,47 +55,6 @@ public class ScenicConfigManager extends ConfigManager<ScenicConfigV2DTO> {
return config != null ? config.getConfigValue() : null;
}
/**
* 获取字符串值
*
* @param key 配置键
* @return 字符串值,如果键不存在或转换失败返回null
*/
public String getString(String key) {
return ConfigValueUtil.getStringValue(configMap, key);
}
/**
* 获取字符串值,如果为null则返回默认值
*
* @param key 配置键
* @param defaultValue 默认值
* @return 字符串值或默认值
*/
public String getString(String key, String defaultValue) {
return ConfigValueUtil.getStringValue(configMap, key, defaultValue);
}
/**
* 获取整数值
*
* @param key 配置键
* @return Integer值,如果键不存在或转换失败返回null
*/
public Integer getInteger(String key) {
return ConfigValueUtil.getIntValue(configMap, key);
}
/**
* 获取整数值,如果为null则返回默认值
*
* @param key 配置键
* @param defaultValue 默认值
* @return Integer值或默认值
*/
public Integer getInteger(String key, Integer defaultValue) {
return ConfigValueUtil.getIntValue(configMap, key, defaultValue);
}
/**
* 获取长整数值
@@ -206,85 +165,7 @@ public class ScenicConfigManager extends ConfigManager<ScenicConfigV2DTO> {
return ConfigValueUtil.getBooleanValue(configMap, key, defaultValue);
}
/**
* 获取枚举值
*
* @param key 配置键
* @param enumClass 枚举类型
* @param <T> 枚举类型泛型
* @return 枚举值,如果键不存在或转换失败返回null
*/
public <T extends Enum<T>> T getEnum(String key, Class<T> enumClass) {
return ConfigValueUtil.getEnumValue(configMap, key, enumClass);
}
/**
* 获取枚举值,如果为null则返回默认值
*
* @param key 配置键
* @param enumClass 枚举类型
* @param defaultValue 默认值
* @param <T> 枚举类型泛型
* @return 枚举值或默认值
*/
public <T extends Enum<T>> T getEnum(String key, Class<T> enumClass, T defaultValue) {
T value = ConfigValueUtil.getEnumValue(configMap, key, enumClass);
return value != null ? value : defaultValue;
}
/**
* 获取原始对象值
*
* @param key 配置键
* @return 原始Object值
*/
public Object getObject(String key) {
return ConfigValueUtil.getObjectValue(configMap, key);
}
/**
* 获取并转换为指定类型的对象
*
* @param key 配置键
* @param clazz 目标类型
* @param <T> 目标类型泛型
* @return 转换后的对象,如果转换失败返回null
*/
public <T> T getObject(String key, Class<T> clazz) {
return ConfigValueUtil.getObjectValue(configMap, key, clazz);
}
/**
* 获取Map类型的值
*
* @param key 配置键
* @return Map值,如果转换失败返回null
*/
public Map<String, Object> getMap(String key) {
return ConfigValueUtil.getMapValue(configMap, key);
}
/**
* 获取List类型的值
*
* @param key 配置键
* @return List值,如果转换失败返回null
*/
public List<Object> getList(String key) {
return ConfigValueUtil.getListValue(configMap, key);
}
/**
* 获取指定元素类型的List值
*
* @param key 配置键
* @param elementClass List元素类型
* @param <T> List元素类型泛型
* @return 指定类型的List,如果转换失败返回null
*/
public <T> List<T> getList(String key, Class<T> elementClass) {
return ConfigValueUtil.getListValue(configMap, key, elementClass);
}
/**
* 检查配置键是否存在
@@ -320,6 +201,7 @@ public class ScenicConfigManager extends ConfigManager<ScenicConfigV2DTO> {
*
* @return 配置项数量
*/
@Override
public int size() {
return configMap.size();
}