package com.lxzn.base.controller;
|
import com.fasterxml.jackson.databind.ObjectMapper;
|
import org.slf4j.Logger;
|
import org.slf4j.LoggerFactory;
|
|
import java.util.Collections;
|
import java.util.List;
|
import java.util.Map;
|
import java.util.stream.Collectors;
|
|
public class TypeConverter {
|
private static final Logger logger = LoggerFactory.getLogger(TypeConverter.class);
|
private static final ObjectMapper objectMapper = new ObjectMapper();
|
|
public static <T> List<T> convertList(List<?> rawList, Class<T> targetType) {
|
if (rawList == null || rawList.isEmpty()) {
|
return Collections.emptyList();
|
}
|
|
return rawList.stream()
|
.map(item -> {
|
try {
|
// 处理嵌套Map结构
|
if (item instanceof Map) {
|
return objectMapper.convertValue(item, targetType);
|
}
|
// 如果已经是目标类型直接转换
|
if (targetType.isInstance(item)) {
|
return targetType.cast(item);
|
}
|
throw new IllegalArgumentException("类型不兼容: " + item.getClass() + " -> " + targetType);
|
} catch (Exception e) {
|
logger.error("类型转换失败: {}", e.getMessage());
|
throw new TypeConversionException("无法转换类型: " + item.getClass().getName() + " 到 " + targetType.getName());
|
}
|
})
|
.collect(Collectors.toList());
|
}
|
|
public static class TypeConversionException extends RuntimeException {
|
public TypeConversionException(String message) {
|
super(message);
|
}
|
}
|
}
|